为什么rsa加密时我把密钥长度设成256位,太长的字符串加密就会出错?
程序员文章站
2022-05-14 16:58:44
...
加密的字符串大概30位时就会出错,不知道为什么,生成的密钥长度是256位的
256bits = 32bytes
最长明文长度 = 32 - 11 = 21bytes = 168bits 感谢@钟宇腾的回答,没有padding的RSA称为Textbook RSA,是在教科书中所教的基于数学原理的RSA,如Wikipedia页面的RSA定义:
这里所说的M指的是要加密的数据,但在实际应用的时候却不一定为明文本身。
如果明文不加以处理则有可能受到攻击。
举个简单的例子:
当选择很小的值,如;而且,这时加密后的数据就会变成:
只需要计算一个开三次根号就可以得到原文。
在PKCS #1 v2.1标准里面有定义这个padding RFC 3447 - Public-Key Cryptography Standards (PKCS) #1: RSA Cryptography Specifications Version 2.1
但根据RSADSI颁布的RSA加密解密标准PKCS#1(为了避免RSA算法的一些漏洞),在加密的时候,会在data前面加入至少11bytes的padding
第一byte全置0
第二byte为格式位,全置2时为加密,全置1时为签名
接着是至少八byte的padding,random nonzero。
最后一byte全置0
因此padding总长至少为11byte。
回复内容:
明文长度(Bytes)256bits = 32bytes
最长明文长度 = 32 - 11 = 21bytes = 168bits 感谢@钟宇腾的回答,没有padding的RSA称为Textbook RSA,是在教科书中所教的基于数学原理的RSA,如Wikipedia页面的RSA定义:
这里所说的M指的是要加密的数据,但在实际应用的时候却不一定为明文本身。
如果明文不加以处理则有可能受到攻击。
举个简单的例子:
当选择很小的值,如;而且,这时加密后的数据就会变成:
只需要计算一个开三次根号就可以得到原文。
在PKCS #1 v2.1标准里面有定义这个padding RFC 3447 - Public-Key Cryptography Standards (PKCS) #1: RSA Cryptography Specifications Version 2.1
Steps:
1. Length checking: If mLen > k - 11, output "message too long" and
stop.
2. EME-PKCS1-v1_5 encoding:
a. Generate an octet string PS of length k - mLen - 3 consisting
of pseudo-randomly generated nonzero octets. The length of PS
will be at least eight octets.
b. Concatenate PS, the message M, and other padding to form an
encoded message EM of length k octets as
EM = 0x00 || 0x02 || PS || 0x00 || M.
RSA的标准里面是没有padding的。但根据RSADSI颁布的RSA加密解密标准PKCS#1(为了避免RSA算法的一些漏洞),在加密的时候,会在data前面加入至少11bytes的padding
第一byte全置0
第二byte为格式位,全置2时为加密,全置1时为签名
接着是至少八byte的padding,random nonzero。
最后一byte全置0
因此padding总长至少为11byte。
声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
相关文章
相关视频
上一篇: PHP5中file
下一篇: 如何把一个文本中的Email用*隐藏