Миграция DCPCrypt на Lockbox3
Я новичок в области шифрования / дешифрования. Я пытаюсь использовать Lockbox3, для которого я хочу перенести мое приложение, чтобы расшифровать строку, зашифрованную с помощью DCPCrypt. Допустим, у меня есть эта функция для шифрования:
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, но это не работает.
Любая идея? Спасибо всем за любые советы.
1 ответ
Как насчет...
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;
Все это показано в прилагаемой демо-программе и онлайн-справке. Прилагаемая демонстрационная программа и онлайн-справка должны быть вашей первой точкой отсчета. Пожалуйста, изучите их, прежде чем идти в Stackru или на форумы, так как ответчики будут склонны повторять то, что уже было написано в вашу пользу.