用PHP实现desecb加密

用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

给出“a67a318c98a0307502ba81caade2f3a9”作为密钥“1234567890abcdef”和有效负载“加密此”的DES ECB结果

PHP代码

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����