我想知道下面的代码中是否添加了 PKCS#5 填充?如果没有怎么添加?
$message = "insert plaintext message here";
$iv = pack('H*', 'insert hex iv here');
$key = pack('H*', 'insert hex key here');
$enc = mcrypt_encrypt(MCRYPT_DES, $key, $message, MCRYPT_MODE_CBC, $iv);
echo bin2hex($enc);
我还想创建一个 PHP 代码来解密使用 DES/CBC/PKCS5Padding 创建的字符串。我认为可以修改上面提到的代码来解密。
对我来说重要的是获得 PKCS#5 Padding 和 Unpadding 脚本。
最佳答案
不,没有添加。不幸的是,PHP/mcrypt 使用零填充,直到消息达到 block 大小的 N 倍。
要添加 PKCS#5 填充,请使用以下公式:
p = b - l % b
其中l
是消息长度,b
是 block 大小,%
是余数运算。然后在执行加密之前将带有值 p
的 p
字节添加到末尾。
关于用于 DES/CBC/PKCS5Padding 加密和解密的 PHP 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19734916/