用PHP实现desecb加密
给出“a67a318c98a0307502ba81caade2f3a9”作为密钥“1234567890abcdef”和有效负载“加密此”的DES ECB结果 PHP代码用PHP实现desecb加密,php,encryption,des,ecb,Php,Encryption,Des,Ecb,给出“a67a318c98a0307502ba81caade2f3a9”作为密钥“1234567890abcdef”和有效负载“加密此”的DES ECB结果 PHP代码 echo bin2hex(mcrypt_encrypt( MCRYPT_DES, hex2bin("1234567890abcdef"), "encrypt this", MCRYPT_MODE_ECB)) . "\n"; 打印出“1a29ee87f2ad67644ff28450c676a664
echo bin2hex(mcrypt_encrypt(
MCRYPT_DES,
hex2bin("1234567890abcdef"),
"encrypt this",
MCRYPT_MODE_ECB)) . "\n";
打印出“1a29ee87f2ad67644ff28450c676a664”
代码有什么问题?noobs4tools网站去掉了hex2bin
函数,并将密钥长度截断为8个字符(正如Yoshi在评论中所说)
如果密钥大小为12345678
,则网站和PHP代码的输出都是一致的
DES密钥大小在手册中规定为56位。请阅读下面有关DES特定键大小的一些有用背景知识
noobs4tools网站使用的密钥:
代码使用的密钥:
hex2bin("1234567890abcdef"); // 4Vx����
然后,此差异将为您提供不同的输出
因此,该网站不会将密钥转换为任何其他数字或数据形式。它希望您在页面脚本中提供已正确格式化的值 tools4noobs似乎将密码短语剪切为
“12345678”
(与您的示例一样,没有hex2bin
)。根据“不再接受无效的密钥和iv大小。如果输入无效,mcrypt_encrypt()现在将抛出警告并返回FALSE。以前的密钥和iv用“\0”字节填充到下一个有效大小。”(从PHP 5.6.0开始)。我已经用PHP 5.6.26-0+deb8u1测试了代码,mcrypt_encrypt()确实抛出警告或返回FALSE。谢谢@haba713您的评论是正确的,我已经更新了我的答案。抱歉@Martin。“不是”这个词在我之前的评论中被省略了。。。所以我已经用PHP5.6.26-0+deb8u1测试了代码,mcrypt_encrypt()不会抛出警告或返回FALSE。@haba713是的,我发现我输入的文本比沙盒中的hex2bin
函数的文本更重。我的答案现在已经完成,据我所知,问题在于第三方网站nobs4tools处理输入数据
hex2bin("1234567890abcdef"); // 4Vx����