Fórum Criptografia em .NET #66544

06/05/2008

0

Estou tentando implementar um esquema de criptografia numa aplicação feita em Delphi .NET mas não estou conseguindo encontrar exemplos de como fazê-lo ou componentes que facilitem o serviço. Todos os exemplos que encontro são em VB .NET (que estou tendo dificuldade em portar para Delphi) e os para Delphi geralmente só envolvem o usos de hashes, e eu preciso da criptografia simétrica (criptografar e descriptografar depois). Quanto aos componentes, só encontro pagos e/ou para .NET 2.0


Gandalf.nho

Gandalf.nho

Responder

Posts

08/05/2008

Gandalf.nho

Achei um componente gratuito para criptografia, mas estou tendo um problema: o componente gera o texto criptografado direitinho, mas dependendo do resultado da saida, esse é gravado de forma incorreta no banco (até um simples CTRL+C, CTRL+V copia errado) o que impossibilita que seja descriptografado. Alguma idéia do que possa ser?


O componente é esse aqui: http://www.devpower.com/encrypt.net/home.aspx


Responder

Gostei + 0

08/05/2008

Massuda

.NET tem um namespace só com rotinas de criptografia...

:arrow: [url=http://msdn.microsoft.com/en-us/library/system.security.cryptography.aspx]system.security.cryptography[/url]

Um exemplo de uso em C#...

:arrow: [url=http://www.codeproject.com/KB/security/encryption_decryption.aspx]Encryption/Decryption with .NET[/url]


Responder

Gostei + 0

08/05/2008

Gandalf.nho

A biblioteca de criptografia do .NET eu conheço, o problema é entender como ela funciona porque eu só usei criptografia antes via componentes no Win32. Mas vou tentar ver se consigo fazer algo com esse exemplo em C#


Responder

Gostei + 0

09/05/2008

Gandalf.nho

Eu achei um conversor C# para Delphi .NET (no próprio site da Codegear) e converti o exemplo acima, mas está dando um erro e não sei pq:

Trecho original em C
private byte[] GetLegalKey(string Key)
        {
            string sTemp;
            if (mobjCryptoService.LegalKeySizes.Length > 0)
            {
                int lessSize = 0, moreSize = mobjCryptoService.LegalKeySizes[0].MinSize;
                // key sizes are in bits
                while (Key.Length * 8 > moreSize)
                {
                    lessSize = moreSize;
                    moreSize += mobjCryptoService.LegalKeySizes[0].SkipSize;
                }
                sTemp = Key.PadRight(moreSize / 8, ´ ´);
            }
            else
                sTemp = Key;

            // convert the secret key to byte array
            return ASCIIEncoding.ASCII.GetBytes(sTemp);
        }


Convertido pela ferramenta:
function SymmCrypto.GetLegalKey(Key: string): TArrayOfByte;
var
  moreSize: Integer;
  lessSize: Integer;
  sTemp: string;
begin
  if (Self.mobjCryptoService.LegalKeySizes.Length > 0) then
  begin
    lessSize := 0;
    moreSize := Self.mobjCryptoService.LegalKeySizes[0].MinSize;
    while (Key.Length * (8 > moreSize)) do
    begin
      Self.lessSize := moreSize;
    end;
    sTemp := Key.PadRight((moreSize / 8), ´ ´);
  end
  else
    sTemp := Key;
  Result := ASCIIEncoding.ASCII.GetBytes(sTemp);
end;


Estão aparecendo 2 erros na hora de compilar. Nessa linha:
if (Self.mobjCryptoService.LegalKeySizes.Length > 0) then

acusa ´Record ou classe type required´

e nessa aqui:
while (Key.Length * (8 > moreSize)) do

acusa ´Operator not applicable to this operand type´



Eu preciso resolver esse problema da criptografia. Será que ninguém aqui já trabalhou com isso em Delphi .NET?


Responder

Gostei + 0

09/05/2008

Massuda

if (Self.mobjCryptoService.LegalKeySizes.Length > 0) then

Talvez isso funcione...
if (Length(Self.mobjCryptoService.LegalKeySizes) > 0) then


while (Key.Length * (8 > moreSize)) do

Acho que o correto seria...
while (Key.Length * 8 > moreSize) do



Responder

Gostei + 0

10/05/2008

Gandalf.nho

Valeu, pelo menos consegui compilar. Só que agora ao testar o código, parece que ele fica preso naquela parte do while, não dá mensagem de erro nem nada, e debugar não indica nada errado.


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar