2009-09-02 5 views

Répondre

7

Il ya quelque temps, j'ai écrit ce code, devrait fonctionner correctement.

uses 
    System.Security.Cryptography, 
    System.Text; 

type 
    TDynamicArrayOfByte = array of Byte; 

function Encrypt(StrtoEncrypt, PK: string): TDynamicArrayOfByte; // pk, must be of a string of 32 characters 
var 
    miRijndael: Rijndael; 
    encrypted: TDynamicArrayOfByte; 
    toEncrypt: TDynamicArrayOfByte; 
    bytPK:  TDynamicArrayOfByte; 
    i: integer; 
begin 
    Result  := nil; 
    miRijndael := System.Security.Cryptography.RijndaelManaged.Create; 
    try 
    toEncrypt := System.Text.Encoding.UTF8.GetBytes(StrtoEncrypt); 
    bytPK  := System.Text.Encoding.UTF8.GetBytes(PK);  
    miRijndael.Key := bytPK; 
    miRijndael.GenerateIV; 
    encrypted := (miRijndael.CreateEncryptor()).TransformFinalBlock(toEncrypt, 0, Length(toEncrypt)); 
    setlength(result, Length(miRijndael.IV) + Length(encrypted)); 

     for i:=0 to Length(miRijndael.IV)-1 do 
     result[i] := miRijndael.IV[i]; 

     for i:=0 to Length(encrypted)-1 do 
     result[i + Length(miRijndael.IV)] := encrypted[i]; 

    finally 
     miRijndael.Clear(); 
    end; 
end; 

function DesEncrypt(BufferEncrypted: TDynamicArrayOfByte; PK: string): string; // pk, must be of a string of 32 characters 
var 
    miRijndael: Rijndael; 
    encrypted: TDynamicArrayOfByte; 
    tempArray: TDynamicArrayOfByte; 
    bytPK:  TDynamicArrayOfByte; 
    i : integer; 
begin 
    Result  := ''; 
    miRijndael := System.Security.Cryptography.RijndaelManaged.Create; 
    setlength(tempArray, Length(miRijndael.IV)); 
    setlength(encrypted, Length(BufferEncrypted) - Length(miRijndael.IV)); 
    try 
    bytPK  := System.Text.Encoding.UTF8.GetBytes(PK); 
    miRijndael.Key := bytPK; 

     for i:=0 to Length(tempArray)-1 do 
     tempArray[i] := BufferEncrypted[i]; 

     for i:=0 to Length(encrypted)-1 do 
     encrypted[i] := BufferEncrypted[i + Length(tempArray)]; 

    miRijndael.IV := tempArray; 
    Result := System.Text.Encoding.UTF8.GetString((miRijndael.CreateDecryptor()).TransformFinalBlock(encrypted, 0, Length(encrypted))); 
    finally 
    miRijndael.Clear(); 
    end; 
end; 

Au revoir.

+0

merci beaucoup, fonctionne parfaitement :). – Salvador

+0

+1 rapide et utile! – Argalatyr

+0

Est-ce que quelqu'un a donné une réponse négative à cette réponse? Cela semble étrange puisque c'est sur. –

0

Turbo Power LockBox, il fournit soutien Blowfish, RSA, MD5, SHA-1, DES, DES triple-, Rijndael et la signature numérique des messages.

https://sourceforge.net/projects/tplockbox/

+2

Idéal pour Win32 (et apparemment Kylix), mais pas Delphi pour .Net. –

0

Il y a une source de delphi à http://rcolonel.tripod.com/. Vous pourriez être capable de l'utiliser dans Delphi.net. Cependant, il vaut mieux trouver un module .net et simplement l'utiliser. Vous devriez pouvoir utiliser un module C# ou vb.net dans delphi.net.

0

La page Cryptographie Delphi Les composants cryptographiques DCP contiennent une implémentation de l'algorithme Rijndael. Écrit par David Barton ([email protected]) http://www.scramdisk.clara.net/, composants DCP Crypto sont très complets, libres d'exporter, des composants cryptographiques à clé symétrique.

Questions connexes