0

私は暗号化/復号化ルーチンの初心者です。DCPCrypt を使用して暗号化された文字列を復号化するために、アプリを移行したい Lockbox3 を使用しようとしています。暗号化するこの機能があるとしましょう:

function TfrmMain.Encrypt(value: string): string;
var
  CipherR : TDCP_rijndael;
  m, sm, Key, IV: string;
  Data: string;
begin
  Key := PadWithZeros(m, KeySize);
  IV := PadWithZeros(sm, BlockSize);
  Data := PadWithZeros(value, BlockSize);
  m := 'SOMEWORDSOMEWORD';
  sm := 'WORDSOMEWORDSOME';

  Key := PadWithZeros(m, KeySize);
  IV := PadWithZeros(sm, BlockSize);
  CipherR := TDCP_rijndael.Create(Self);
  if Length(m) <= 16 then
    CipherR.Init(Key[1], 128, @IV[1])
  else if Length(m) <= 24 then
    CipherR.Init(Key[1], 192, @IV[1])
  else
    CipherR.Init(Key[1], 256, @IV[1]);
  CipherR.EncryptCBC(Data[1], Data[1], Length(Data));
  CipherR.Free;
  FillChar(Key[1], Length(Key), 0);
  code := Base64EncodeStr(Data);
  Result := code;
end;

Lockbox3 を使用して、この方法で暗号化された文字列を復号化したいのですが、m および sm として暗号化関数で使用される値を使用する必要があります。sm 値を使用して Codec1.Password を設定しようと考えましたが、これは機能しません。

何か案が?アドバイスをありがとうございました。

4

1 に答える 1

0

どうですか...

function TfrmMain.Encrypt( const value: string): string;
var
  Codec: TCodec;
  Lib  : TCyptographicLibrary;
  Ciphertext: ansistring;
begin
Codec := TCodec.Create( nil);
Lib   := TCyptographicLibrary.Create( nil);
Codec.CryptoLibrary := Lib;
Codec.StreamCipherId := BlockCipher_ProgId;
Codec.BlockCipherId := 'native.AES-256'; // AES-256 cipher
Codec.ChainModeId := CBC_ProgId;         // CBC chaining
Codec.Password := 'WORDSOMEWORDSOME';
Codec.EncryptString( Value, Ciphertext); // Assumes UNICODE supporting compiler.
result := Ciphertext; // Implicit utf8string --> unicode string coersion here.
Codec.Burn;
Lib.Free;
Codec.Free;
end;

function TfrmMain.ShowCiphertextOfSomeWords;
begin
ShowMessage( 'base64 of ciphertext = ' + Encrypt( 'SOMEWORDSOMEWORD'))
end;

これらはすべて、バンドルされているデモ プログラムとオンライン ヘルプに示されています。バンドルされているデモ プログラムとオンライン ヘルプを最初に参照してください。回答者はあなたの利益のためにすでに書かれたことを繰り返す傾向があるため、Stackoverflow またはフォーラムに行く前にこれらを調べてください。

于 2013-03-29T07:35:13.690 に答える