作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在 Delphi 中使用 DCrypt 给出此代码:
Uses DCPcrypt2, DCPblockciphers, DCPrijndael, DCPbase64;
procedure TForm1.Button1Click(Sender: TObject);
var Cipher : TDCP_rijndael;
ss, k, Data, Key, IV : Ansistring;
const
KeySize = 32; // 32 bytes = 256 bits
BlockSize = 16; // 16 bytes = 128 bits // IV
begin
key := '12345678901234567890123456789012';
iv := '1234567890123456';
Data := 'thisis128bitstxt';
Cipher := TDCP_rijndael.Create(nil);
Cipher.Init(Key[1],128,@IV[1]);
Cipher.EncryptCBC(Data[1],Data[1],Length(Data));
Cipher.Free;
Data := DCPBase64.Base64EncodeStr(Data);
Memo1.Lines.Add(Data);
end;
我得到以下信息:Eq7iMlVKysMMXdhR0rtrwA==
在 PHP 中使用 OpenSSL 进行相同的尝试:
<?
$s = "thisis128bitstxt";
$s = openssl_encrypt($s, "AES-128-CBC", "12345678901234567890123456789012", 0, "1234567890123456");
echo $s . "</br>";
?>
返回:Eq7iMlVKysMMXdhR0rtrwEbhkypNJyuwGafLILvwpbY=
出了什么问题?
如果我尝试解密 delphi 输出,我会得到一个空字符串:
$s = "Eq7iMlVKysMMXdhR0rtrwA==";
$s = openssl_decrypt($s, "AES-128-CBC", "12345678901234567890123456789012", 0, "1234567890123456");
echo $s . "</br>";
最佳答案
David Heffernan 已经引导您走向正确的方向。我在这里完成它。
你不应该错过填充。我按如下方式修复了您的代码。
procedure TForm1.Button1Click(Sender: TObject);
var Cipher : TDCP_rijndael;
Data, Key, IV : ansistring;
index, dataLength, bsize, pad: integer;
begin
key := '12345678901234567890123456789012';
IV := '1234567890123456';
Data := 'thisis128bitstxt';
Cipher := TDCP_rijndael.Create(nil);
try
Cipher.Init(Key[1],128,@IV[1]);
//don't miss padding
{start padding}
dataLength := Length(Data);
bsize := (Cipher.BlockSize div 8);
pad := bsize - (dataLength mod bsize);
for index := 1 to pad do
Data := Data+chr(pad);
{end padding}
Cipher.EncryptCBC(Data[1],Data[1],Length(Data));
finally
Cipher.Free;
end;
Data := DCPBase64.Base64EncodeStr(Data);
Memo1.Lines.Add(Data);
end;
现在你将得到与 php 相同的结果。
关于delphi - 使用 DCrypt 在 Delphi (10 Seattle) 中使用 AES 加密字符串,使用 PHP/OpenSSL 解密,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41285641/
我正在 Delphi XE2 中编写自己的组件,但我主要使用 C++ Builder。这就是为什么我需要一些有关 Delphi DCrypt 库的帮助。 我的新组件需要有一个方法(函数)来计算字符串的
我正在使用 NodeJs 和 MySQL 创建一个登录和注册应用程序。我使用 bcrypt 对密码进行了哈希处理,但是在用户注册后我无法使用电子邮件和密码登录。请帮忙 下面是注册代码片段 // reg
在 Delphi 中使用 DCrypt 给出此代码: Uses DCPcrypt2, DCPblockciphers, DCPrijndael, DCPbase64; procedure TForm1
我是一名优秀的程序员,十分优秀!