Fórum DCPCrypt2 + Delphi 7 #405031
14/07/2011
0
Abraão Monteiro
Curtir tópico
+ 0Posts
18/07/2011
Abraão Monteiro
procedure TForm1.Button1Click(Sender: TObject);const//CHAVE: 39 31 30 30 30 30 36 30 30 36 30 30 39 30 37 39 30 30 39 30 30 33 39 30 33 34 32 39 30 38 35 32//TEXTO:// 31 32 33 34 35 36 37 38 39 30 31 32 33 34 35 39 31 32 33 34 35 36 37 38 39 30 31 32 33 34 35 39 31 32 // 33 34 35 3637 38 39 30 31 32 33 34 35 39 31 32 33 34 35 36 37 38 39 30 31 32 33 34 35 39 31 32 33 34 // 35 36 37 38 39 30 31 32 33 34 35 39 31 32 33 34 35 36 37 38 39 30 31 32 33 34 35 39 31 32 33 34 35 36 // 37 38 39 30 31 32 33 34 35 39 31 32 33 34 35 36 37 38 39 30 31 32 33 34 35 39 31 32 33 34 35 36 37 38 // 39 30 31 32 33 34 35 39 31 32 33 34 35 36 37 38 39 30 31 32 33 34 35 39 31 32 33 34 35 36 37 38 39 30 // 31 32 33 34 35 39 31 32 33 34 35 36 37 38 39 30 31 32 33 34 35 39 31 32 33 34 35 36 37 38 39 30 31 32 // 33 34 35 39 30 31 32 33 34 35 39 30 31 32 33 34 35 39 30 31 32 33 34 35 39 30 31 32 33 34 35 39 30 31 // 32 33 34 35 39 30 31 32 33 34 35 39 30 31 32 33 34 35
dados: array[0..255] of byte = ($31,$32,$33,$34,$35,$36,$37,$38,$39,$30,$31,$32,$33,$34,$35,$39,$31,$32,$33,$34,$35,$36, $37,$38,$39,$30,$31,$32,$33,$34,$35,$39,$31,$32,$33,$34,$35,$36,$37,$38,$39,$30,$31,$32, $33,$34,$35,$39,$31,$32,$33,$34,$35,$36,$37,$38,$39,$30,$31,$32,$33,$34,$35,$39,$31,$32, $33,$34,$35,$36,$37,$38,$39,$30,$31,$32,$33,$34,$35,$39,$31,$32,$33,$34,$35,$36,$37,$38, $39,$30,$31,$32,$33,$34,$35,$39,$31,$32,$33,$34,$35,$36,$37,$38,$39,$30,$31,$32,$33,$34, $35,$39,$31,$32,$33,$34,$35,$36,$37,$38,$39,$30,$31,$32,$33,$34,$35,$39,$31,$32,$33,$34, $35,$36,$37,$38,$39,$30,$31,$32,$33,$34,$35,$39,$31,$32,$33,$34,$35,$36,$37,$38,$39,$30, $31,$32,$33,$34,$35,$39,$31,$32,$33,$34,$35,$36,$37,$38,$39,$30,$31,$32,$33,$34,$35,$39, $31,$32,$33,$34,$35,$36,$37,$38,$39,$30,$31,$32,$33,$34,$35,$39,$31,$32,$33,$34,$35,$36, $37,$38,$39,$30,$31,$32,$33,$34,$35,$39,$30,$31,$32,$33,$34,$35,$39,$30,$31,$32,$33,$34, $35,$39,$30,$31,$32,$33,$34,$35,$39,$30,$31,$32,$33,$34,$35,$39,$30,$31,$32,$33,$34,$35, $39,$30,$31,$32,$33,$34,$35,$39,$30,$31,$32,$33,$34,$35); chave: array[0..31] of byte = ($39,$31,$30,$30,$30,$30,$36,$30,$30,$36,$30,$30,$39,$30,$37,$39,$30,$30,$39,$30,$30,$33, $39,$30,$33,$34,$32,$39,$30,$38,$35,$32);var dados_saida: array[0..255] of byte;begin FillChar(dados_saida,SizeOf(dados_saida),0); aes.Init(chave,256,nil); aes.EncryptECB(dados, dados_saida); memo1.Lines.Add('+ CRIPTOGRAFADO: ' + #13#10 + ByteToHex(dados_saida)); aes.DecryptECB(dados_saida,dados_saida); memo1.Lines.Add(#13#10 + '+ DESCRIPTOGRAFADO: ' + #13#10 + ByteToHex(dados_saida));end;Obtive como saída:
+ CRIPTOGRAFADO: 1B513F417650C9663851F1C0D3A10667000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + DESCRIPTOGRAFADO: 31323334353637383930313233343539000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
Somente os 16 primeiros bytes de entrada são criptografados satisfatoriamente, os outros continuam zerados. Seria algo relacionado a alguma limitação da codificação ECB? Os dados de entrada devem ser múltiplos de algum valor que desconheço? No caso utilizo 256 bytes de dados de entrada. Desde já agradeço! Abraão
Gostei + 0
20/07/2011
Abraão Monteiro
function TForm1.AESEncryptString(const S: string; Key: string): string; var lCrypt : TDCP_rijndael; begin lCrypt := TDCP_rijndael.Create(nil); try lCrypt.InitStr(Key,TDCP_sha256); Setlength(result, length(S)); lCrypt.EncryptCBC(S[1], result[1],length(S)); Result := Str2Base64Enc(Result); finally lCrypt.Free; end; end; function TForm1.AESDecryptString(const S: string; Key: string): string; var lCrypt :TDCP_rijndael; begin lCrypt := TDCP_rijndael.Create(nil); try lCrypt.InitStr(Key,TDCP_sha256); Result := Str2Base64Dec(S); lCrypt.DecryptCBC(Result[1], result[1], length(Result)); finally lCrypt.Free; end; end;
No caso da criptografia no modo de operação CBC utiliza-se um vetor de inicialização(IV), mas no caso acima, assume-se um valor default para este vetor? Utiliza-se o hash da chave para gerar uma entrada em hexadecimal para a chave para o algoritmo do AES-256. Para o mesmo precisamos de 32 caracteres * 8 bits = 256 bits. Alguém pode me explicitar como é gerada a chave no algoritmo acima?
Gostei + 0
21/07/2011
Abraão Monteiro
Gostei + 0
09/05/2013
José
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)