【问题标题】:mcrypt_encrypt(): Key of size [closed]mcrypt_encrypt():大小的密钥[关闭]
【发布时间】:2015-09-16 11:58:07
【问题描述】:

mcrypt_encrypt():此算法不支持大小为 10 的密钥。仅支持大小为 16、24 或 32 的键!

http://i.stack.imgur.com/qE1ZD.png

我该如何解决这个问题??

【问题讨论】:

  • 显然,提供长度为 16、24 或 32 的密​​钥...
  • @MarcB 你能给我一个例子吗,我在任何地方都找不到:(
  • 没有人帮助这个网站:(每个人都知道一切......
  • 您没有显示完整的代码来重现问题,但我认为您将密钥与密码混淆了。密钥具有特定大小,但密码短语没有。您可以使用您选择的密钥派生函数从密码短语中获取密钥。 PBKDF2 是一个受欢迎的选择。

标签: php laravel encryption mcrypt


【解决方案1】:

过去,如果您的密钥太短,PHP 会用 \0 填充它。自 PHP 版本 5.6.0 起不再是这种情况。您应该检查正在使用的密码所需的密钥有多大:http://php.net/manual/en/function.mcrypt-get-key-size.php 注意还有其他方法可以检查密钥大小,请查看文档。我理解密钥大小的简单方法:ASCII 中的“fubar”之类的字符串是 5 * 8 = 40 个字节(每个字符 8 个字节)。但这是对使用中的字符集的假设。 php.net 上的一些 cmets 更好地解释了如何滚动正确大小的密钥:

$key = pack('H*', "bcb04b7e103a0cd8b54763051cef08bc55abe029fdebae5e1d417e2ffb2a00a3");

这里 64 字符的字符串将被转换为 32 字节的密钥,因为 bc 是一个字节,b0 是另一个,等等。来自http://php.net/manual/en/function.mcrypt-encrypt.php

您可以使用 strlen() 再次检查字节数。从上面的例子 strlen($key) 将打印出 32。

【讨论】:

    猜你喜欢
    • 2015-03-13
    • 1970-01-01
    • 2016-11-03
    • 2016-07-22
    • 1970-01-01
    • 2013-07-04
    • 2013-03-02
    • 2016-11-25
    • 1970-01-01
    相关资源
    最近更新 更多