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

RSA块的数据过多失败。什么是PKCS#7?

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

RSA块的数据过多失败。什么是PKCS#7?

如果使用分组密码,则输入的密码必须是分组位长度的精确倍数。

为了加密任意长度的数据,首先需要将数据填充为块长度的倍数。可以使用任何方法来完成此操作,但是有许多标准。PKCS7是非常常见的一种,您可以在wikipedia上有关padding的文章中看到概述。

由于块密码对块进行操作,因此您还需要提出一种将加密的块级联的方法。这非常重要,因为天真的技术大大降低了加密强度。对此也有维基百科文章。

您要做的是尝试加密(或解密)长度与密码的块长度不匹配的数据,并且您还明确要求不要填充,也不要链接操作模式。

因此,分组密码无法应用于您的数据,并且您收到了报告的异常。

更新:

作为对您的更新和GregS的评论的回应,我想承认GregS是正确的(我不了解RSA),并详细说明一下:

RSA不对位进行运算,而是对整数进行运算。为了使用RSA你因此需要将字符串信息转换为整数米:

0 < m <n
,其中
n
是在生成过程中所选择的两个不同的素数的模量。RSA算法中密钥的大小通常指
n
。有关此问题的更多详细信息,请参见RSA上的Wikipedia文章。

通常遵循将字符串消息转换为整数而不会丢失(例如截断初始零)的过程,通常使用PKCS#1标准。此过程还添加了一些其他信息,以确保消息的完整性(哈希摘要),语义安全性(IV)等。有了这些额外的数据,可以提供给RSA
/ None /
PKCS1Padding的最大字节数为(keylength-11)。我不知道PKCS#1如何将输入数据映射到输出整数范围,但是我的印象是,它可以接受小于或等于密钥长度-11的任何长度的输入,并为RSA加密生成有效的整数。

如果不使用填充,则您的输入将被简单地解释为数字。您的示例输入{0xbe,0xef}很可能会被解释为{10111110 + o 11101111} =
1011111011101111_2 = 48879_10 = beef_16(原文如此!)。由于0 <Beef_16
<d46f473a2d746537de2056ae3092c451_16,您的加密将成功。它应以小于d46f473a2d746537de2056ae3092c451_16的任何数字成功。

bouncycastle
FAQ中提到了此问题。他们还声明以下内容:

Bouncy
Castle随附的RSA实现仅允许加密单个数据块。RSA算法不适用于流数据,因此不应以这种方式使用。在这种情况下,您应该使用随机生成的密钥和对称密码对数据加密,然后再使用RSA加密随机生成的密钥,然后将加密的数据和加密的随机密钥发送到另一端逆转该过程(即使用其RSA私钥解密随机密钥,然后解密数据)。



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

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

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