2009-09-02 1 views

答えて

7

いくつかの時間前に私はこのコードを書いた、うまくいくはずです。

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; 

Bye。

+0

ありがとうございます。 – Salvador

+0

+1プロンプトと便利! – Argalatyr

+0

誰かがこの回答を下降させましたか?それが現れてから奇妙に思える。 –

0

ターボパワーロックボックス、それはフグ、RSA、MD5、SHA-1、DES、トリプルDESについて サポート、Rijndaelのとメッセージの デジタル署名を提供します。

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

+2

Win32(および明らかにKylix)には適していますが、Delphiでは.NET用ではありません。 –

0

http://rcolonel.tripod.com/でいくつかDelphiソースがあります。あなたはDelphi.netでそれを使用できるかもしれません。しかし、.netモジュールを見つけて、それを使うだけで良いかもしれません。あなたはdelphi.netでc#またはvb.netモジュールを使用できるはずです。

0

Delphi暗号化ページDCP暗号化コンポーネントには、Rijndaelアルゴリズムの実装が含まれています。 Written by David Barton([email protected]http://www.scramdisk.clara.net/、DCP暗号化コンポーネントは、非常に包括的で、自由にエクスポートでき、対称鍵暗号化コンポーネントです。