Мне нужно зашифровать 10-байтовую строку в Delphi с помощью 3DES.Шифровать строку с 3DES usingDelphi 10.1 Berlin
Он должен получить тот же результат, чем это PHP код:
function encrypt_3DES($message, $key){
$bytes = array(0,0,0,0,0,0,0,0);
$iv = implode(array_map("chr", $bytes));
$ciphertext = mcrypt_encrypt(MCRYPT_3DES, $key, $message, MCRYPT_MODE_CBC, $iv);
return $ciphertext;
Я пытался кодировать его, используя DCPCrypt и LockBox 3. Я окончательно отбрасывается DCPCrypt, потому что не было обновление в последнее время, и я «Не уверен, правильно ли он работает с Delphi 10.1 Berlin, поэтому я сосредоточился на LockBox 3, но мне не удалось получить шифрование.
Ключ шифрования - это 24-байтовый ключ (который имеет представление base64). Я не могу найти, как создать такой ключ, используя класс TSymetricKey LockBox, чтобы передать его методу Codec.Init. Поэтому я поместил его в AnsiString и установил его в свойстве Password (хотя в документах говорится, что есть utf8Password, но я не могу его найти).
Тогда есть метод под названием EncryptAnsiString, но он снова ожидает строки (utf16 на Delphi 10.1 Berlin) вместо AnsiStrings (хотя в документации говорится об обратном), поэтому я не удивлен, что результат не соответствует тому, что Я ищу (такое же значение, зашифрованное в этом фрагменте PHP).
Это мой Delphi код:
function Encrypt(Data: AnsiString; LocalKey: AnsiString): AnsiString;
var
BinaryLocalKey: TBytes;
strLocalKey, strTripleDes: AnsiString;
begin
BinaryLocalKey := DecodeBase64(LocalKey);
setString(strLocalKey, PAnsiChar(@BinaryLocalKey[0]), Length(BinaryLocalKey));
Codec1.Rest;
Codec1.Password := strLocalKey;
Codec1.EncryptAnsiString(Data, strTripleDES);
Codec1.Reset;
Result := strTripleDes;
end;
Но этот код не только не получить тот же результат, что и код PHP, но при каждом звонке она возвращает другой результат тот же вход.
Примечание: CODEC1 представляет собой компонент связан с компонентом TCryptographicLibrary, и с Propertis ChainMode установлен CBC * и Cipher установлен 3DES (манипуляция вариант 1)
Знает ли кто, как правильно получить это шифрование 3DES? ,
спасибо.
Почему вы работаете с текстом, а не с байтами? –
Я не вижу, как установить ключ/пароль с помощью байтов. Но да, я должен был бы сделать шифрование, используя байты вместо строк. Я попробую, спасибо. –
Я вполне уверен, что проблема должна заключаться в установке пароля/ключа, и я не вижу, как установить их как двоичный. После того, как набор ключей, я должен иметь возможность расшифровать в памяти, но довольно сложный (вам нужно инициировать и завершить дешифрование и получить результат через Stream), выглядит слишком много, чтобы зашифровать 10-байтовую строку, используя 24- байтовый ключ, так как мне просто нужно сделать. –