将密钥转换为二进制以进行加密

时间:2014-10-31 15:18:57

标签: php encryption

我在很多PHP中看到加密的示例代码,使用pack()将密钥转换为Hex。

$binaryKey = pack('H*', $key)

我创建了两个方法,使用mcrypt函数加密和解密,而不转换字符串键,它测试没有问题。 我没有把钥匙转换成十六进制来错过一些东西吗?

1 个答案:

答案 0 :(得分:1)

使用pack方法将密钥从十六进制转换为二进制。如果不这样做,那么您的密钥每个字节包含一半的熵(随机性)。例如,128位密钥将被扩展为具有128位熵的256位密钥。 AES-128将成为AES-256,因此将使用稍微不同的算法。

PHP的mcrypt使得检测这种东西相当棘手,因为它会接受任何大小的密钥。它只会添加零,直到找到它可以使用的密钥长度,如果它超过256位(对于AES),那么它将删除第一个32之后的任何字节。这被密码学家认为是非常糟糕的做法。因此,在您的情况下,256位密钥可能会被拉伸到512位,之后只能被削减到256位。你的密钥只包含256位密钥的低128位,十六进制!

因此,如果您有一个很好的192或256位密钥,是的,您将错过一些关键信息。此外,您可能会遇到兼容性问题以及后来非常生气的同事。