Criptografia em .NET
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
Curtidas 0
Respostas
Gandalf.nho
06/05/2008
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
O componente é esse aqui: http://www.devpower.com/encrypt.net/home.aspx
GOSTEI 0
Massuda
06/05/2008
.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]
: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]
GOSTEI 0
Gandalf.nho
06/05/2008
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#
GOSTEI 0
Gandalf.nho
06/05/2008
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
Convertido pela ferramenta:
Estão aparecendo 2 erros na hora de compilar. Nessa linha:
acusa ´Record ou classe type required´
e nessa aqui:
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?
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?
GOSTEI 0
Massuda
06/05/2008
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
GOSTEI 0
Gandalf.nho
06/05/2008
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.
GOSTEI 0