栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

如何从AES加密字符串中添加/删除PKCS7填充?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何从AES加密字符串中添加/删除PKCS7填充?

让我们来看看。RFC 5652(加密消息语法)中描述了PKCS#7。

填充方案本身在第6.3节中给出。内容加密过程。它的本质是说:根据需要追加许多字节以填充给定的块大小(但至少一个字节),并且每个字节都应将填充长度作为值。

因此,查看最后一个解密的字节,我们知道要剥离多少字节。(也可以检查它们是否具有相同的值。)

我现在可以给您一对PHP函数来执行此操作,但是我的PHP有点生锈。因此,您可以自己执行此操作(然后随意编辑我的答案以将其添加到其中),或者查看用户为mcrypt文档提供的注释 -其中很多都是关于填充的,并提供了PKCS#7填充的实现。


因此,让我们详细了解一下第一个音符

<?phpfunction encrypt($str, $key) {     $block = mcrypt_get_block_size('des', 'ecb');

这将获得所使用算法的块大小。在您的情况下,我想使用

aes
rijndael_128
代替
des
(我没有对其进行测试)。(相反,您可以在
16
这里简单地使用AES,而不用调用该函数。)

     $pad = $block - (strlen($str) % $block);

这将计算填充大小。

strlen($str)
是数据的长度(以字节为单位),
%$block
以余数为模
$block
,即最后一块中的数据字节数。
$block -...
因此,给出了填充最后一个块所需的字节数(现在是
1
和之间的数字
$block
,含)。

     $str .= str_repeat(chr($pad), $pad);

str_repeat
]产生一个字符串,该字符串由相同字符串的重复组成,此处是由
$pad
$pad
倍给出的字符]的重复,即长度为的字符串
$pad
,填充有
$pad

$str .= ...
将此填充字符串附加到原始数据。

     return mcrypt_encrypt(MCRYPT_DES, $key, $str, MCRYPT_MODE_ECB);

这是加密本身。使用

MCRYPT_RIJNDAEL_128
代替
MCRYPT_DES

 }

现在另一个方向:

 function decrypt($str, $key) {        $str = mcrypt_decrypt(MCRYPT_DES, $key, $str, MCRYPT_MODE_ECB);

解密。(您当然会如上所述更改算法)。$ str现在是解密的字符串,包括填充。

     $block = mcrypt_get_block_size('des', 'ecb');

这也是块大小。(往上看。)

     $pad = ord($str[($len = strlen($str)) - 1]);

这看起来有些奇怪。最好分多个步骤编写:

    $len = strlen($str);    $pad = ord($str[$len-1]);

$len
现在是填充字符串的长度,并且
$str[$len -1]
是该字符串的最后一个字符。
ord
将此转换为数字。因此
$pad
,这是我们之前用作填充的填充值的数字,这是填充长度。

     return substr($str, 0, strlen($str) - $pad);

因此,现在我们

$pad
从字符串中切除了最后一个字节。(而不是
strlen($str)
我们也可以
$len
在这里写:
substr($str, 0,$len - $pad)
。)。

 }?>

请注意,除了使用之外

substr($str, $len - $pad)
,还可以编写
substr($str,-$pad)
,因为
substr
PHP中的函数对负操作数/自变量进行了特殊处理,以从字符串末尾开始计数。(我不知道这比首先获取长度和手动计算索引要高还是低。)

如前所述,并在rossum的注释中指出,与其简单地像这里一样剥离填充,不如检查它是否正确,即查看

substr($str, $len -$pad)
,并检查其所有字节是否正确
chr($pad)
。这只是对损坏的轻微检查(尽管如果使用链接模式而不是ECB,此检查会更有效,并且不能代替真实的MAC)。


(并且仍然告诉您的客户,他们应该考虑更改为比ECB更安全的模式。)



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/395435.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号