【发布时间】:2014-06-21 09:29:26
【问题描述】:
我正在使用 AES 128 ECB 使用密钥作为“KRPTTT101103”的 Delphi 加密“sifrelenecek”字符串,它给了我“FBE4A4405D6C1B54503D9B213E41AE56”,我正在使用 http://aes.online-domain-tools.com/ 检查它是正确的。我正在尝试使用此函数创建与 php 相同的加密;
function sifrele($str, $key){
$block = mcrypt_get_block_size('rijndael_128', 'ecb');
$pad = $block - (strlen($str) % $block);
$str .= str_repeat(chr($pad), $pad);
return base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $key, $str, MCRYPT_MODE_ECB)); }
print sifrele("sifrelenecek","KRPTTT101103")
但是 php 给我的结果是“+wL2yf+72thixicjw0duQA==”,我怎样才能在 Delphi 中加密并在 php 或相反的情况下解密?
在网上搜索了很多函数,但没有一个函数结果与Delphi或http://aes.online-domain-tools.com/相同
提前致谢。
【问题讨论】:
-
看起来您的 Delphi 密码为您提供了加密文本的十六进制表示,而 PHP 密码返回 BASE64 编码表示。
-
@Marko 感谢您的回复,我的想法是一样的,但是在那个网站上,他们是如何得到完全相同的结果的,这就是我想要做的,几乎花了我所有的时间一天,我想不通。
-
问题是你在 PHP 中使用 base64_encode() 函数。我根本不懂 PHP,但你必须将 mcrypt_encrypt() 返回值编码为十六进制,而不是 base64。 bintohex() 也许。
-
您可能需要bin2hex(),它会获取 mcrypt_encrypt 吐出的二进制垃圾并将其转换为不太友好的十六进制字符串。
-
您需要考虑代码并了解您在做什么。一种变体清楚地使用十六进制编码。另一个是base64。它就在您使用的代码中。如果没有真正努力去理解它们,你就不会通过随意尝试事物而得到任何结果。你也在做加密货币。永远不要在缺乏理解的情况下做某事。
标签: php delphi encryption cryptography