Se você deseja fazer criptografia em Pascal no ARM, PowerPC ou outras plataformas exóticas, chegou ao lugar certo. Se você é um usuário da Delphi ou deseja usar algoritmos mais modernos de cifras e hash de hash, como o SHA-3, dê uma olhada no repositório oficial do DEC.
O Delphi Criptografia Compêndio (DEC) é uma biblioteca criptográfica para o construtor Delphi, C ++ e Pascal livre. Foi originalmente desenvolvido por Hagen Reddmann, compatível com Delphi 2009 por Arvid Winkelsdorf, e agora foi portado para libertar Pascal.
As seguintes mudanças foram feitas com relação ao lançamento de 2008:
Os seguintes ambientes foram testados:
Tecnicamente Delphi 7+ e FPC 2.6+ devem ser compatíveis (possivelmente alterações muito pequenas necessárias para versões antigas).
Este projeto está licenciado sob uma licença MIT/Freeware. Você é livre para usar a biblioteca para uso pessoal e comercial, mas por sua conta e risco. Consulte a licença para obter detalhes.
DEC consiste principalmente nas seguintes unidades:
Além disso, o projeto mais deceto está incluído, que fornece casos de teste para todos os algoritmos.
O DEC original também continha as unidades ASN1 e TypeInfoEX - elas não são necessárias para a funcionalidade principal do DEC e não foram portadas. Se você precisar deles, obtenha -os de uma liberação mais antiga.
Verifique Deccipher.pas para obter mais detalhes sobre esses modos.
const
STATIC_KEY: array[0..15] of Byte = (0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15);
var
IV: array[0..15] of Byte;
Plaintext: Binary;
Ciphertext: TBytes;
begin
RandomSeed;
Plaintext := 'abcdefghijklmnopqrstuvwxyz';
with TCipher_Rijndael.Create do
try
Mode := cmCBCx;
RandomBuffer(IV, 16);
Init(STATIC_KEY, 16, IV, 16);
SetLength(Ciphertext, Length(Plaintext));
Encode(Plaintext[1], Ciphertext[0], Length(Plaintext));
Done; // only needed when same object will be used for further operations
FillChar(Plaintext[1], Length(Plaintext), 0);
Decode(Ciphertext[0], Plaintext[1], Length(Ciphertext));
Assert(Plaintext = 'abcdefghijklmnopqrstuvwxyz');
finally
Free;
end;
end;
NOTA: Se o texto simples não estiver acolchoado, o DEC prenderá o último bloco truncado com CFB8! O preenchimento do PKCS não é suportado no DEC. O uso do DEC em conjunto com outras bibliotecas criptográficas é obviamente possível, mas você precisa ter certeza de pré -processamento (ou seja, PAD) o texto simples corretamente.
Observação também: o tipo binário de DEC é definido como RawTestrestring. Se você estiver em um ambiente Unicode (por exemplo, Delphi 2009+), o atendimento é aconselhado ao lidar com variáveis da string de tipo. Nunca os passa diretamente para uma função que leva binária!
var
InputBuf: TBytes;
InputRawStr, Hash: Binary;
begin
SetLength(InputBuf, 4);
FillChar(InputBuf[0], 4, $AA);
Hash := THash_SHA256.CalcBuffer(InputBuf[0], 4, TFormat_MIME64);
// -> 2+0UzrAB0RDXZrkBPTtbv/rWkVR1qboHky0qwFeUTAQ=
InputRawStr := 'My message';
Hash := THash_SHA256.CalcBinary(InputRawStr, TFormat_HEXL);
// -> acc147c887e3b838ebf870c8779989fa8283eff5787b57f1acb35cac63244a81
Hash := THash_SHA256.CalcBinary(InputRawStr, TFormat_Copy);
// -> Hash contains ac c1 47 ... raw bytes. Can be copied to a 32 bytes array using Move(Hash[1], HashBytes[0], 32);
end;
Cada classe de hash também possui funções chamadas KDF2 e KDFX para derivação -chave (por exemplo, para uso como teclas de sessão em cifras).
Writeln(TFormat_MIME64.Encode('My message'));
// -> TXkgbWVzc2FnZQ==
Writeln(TFormat_MIME64.Decode('TXkgbWVzc2FnZQ=='));
// -> My message
Writeln(TFormat_PGP.Encode('Hello, how are you today?'));
// -> SGVsbG8sIGhvdyBhcmUgeW91IHRvZGF5Pw== <line break> =nUAA
A codificação e decodificação estão sobrecarregadas para também tomar um buffer de entrada não ativado.