user-0 提问: RSA算法四字节数字加密解密！

回复:
user: user-0
content: 我找到原因了，RSA算法中用到的整数定义的时候是int类型，但是int类型的变量值的范围是-32768~32767（2^5-1）,如果变量值超出这个范围，就会数据溢出，把int类型换成是long int就可以了，也可以定义无符号基本整形unsined int！

user: user-0
content: 还有人研究过这方面的问题吗？

user: user-1
content: 引用 6 楼 zhuobattle 的回复:[quote=引用 5 楼 t59616 的回复:] [quote=引用 3 楼 zhuobattle 的回复:] [quote=引用 2 楼 t59616 的回复:] [quote=引用 1 楼 zhuobattle 的回复:] RSA有长度限制的，你的D d N要足够长。 不太懂，能详细解释下吗？RSA的长度手什么限制，n=p*q, ed=1 mod(n),这些长度都要多少bit才能满足RSA的安全性？[/quote] RSA真实实现是大整数来做（比如N长度1024bits)的，你用int来做，根本没有什么安全性而言。 一般长度起码要在96bits以上的长度.明文长度有如下关系： 根据不同的padding格式， RSA_PKCS1_PADDING RSA_size-11 RSA_NO_PADDING RSA_size-0 RSA_X931_PADDING RSA_size-2。 举个例子吧，一般密钥1024bits(128 Bytes),那么明文长度不能超过128-11 = 117 Bytes.(采用PKCS1_padding) 所以一般RSA不会用在太长的数据加密上，一般用在签名或者小部分交换加密，如果你真要用 大块数据加密，那么你自己分片吧。   [/quote] 其实我也很奇怪，有的时候t是1024bit，解密m是1024bit的就成功，有的时候就失败了，因为我设置的p和q是随机的，所以t大小也不确定，三位数的是没问题了。  [/quote] 你可以看下，失败的时候那个m值是不是比成功的m值小？[/quote] 你可以看下，失败的时候那个m值是不是比成功的m值大？（上面打错了）

user: user-1
content: 引用 5 楼 t59616 的回复:[quote=引用 3 楼 zhuobattle 的回复:] [quote=引用 2 楼 t59616 的回复:] [quote=引用 1 楼 zhuobattle 的回复:] RSA有长度限制的，你的D d N要足够长。 不太懂，能详细解释下吗？RSA的长度手什么限制，n=p*q, ed=1 mod(n),这些长度都要多少bit才能满足RSA的安全性？[/quote] RSA真实实现是大整数来做（比如N长度1024bits)的，你用int来做，根本没有什么安全性而言。 一般长度起码要在96bits以上的长度.明文长度有如下关系： 根据不同的padding格式， RSA_PKCS1_PADDING RSA_size-11 RSA_NO_PADDING RSA_size-0 RSA_X931_PADDING RSA_size-2。 举个例子吧，一般密钥1024bits(128 Bytes),那么明文长度不能超过128-11 = 117 Bytes.(采用PKCS1_padding) 所以一般RSA不会用在太长的数据加密上，一般用在签名或者小部分交换加密，如果你真要用 大块数据加密，那么你自己分片吧。   [/quote] 其实我也很奇怪，有的时候t是1024bit，解密m是1024bit的就成功，有的时候就失败了，因为我设置的p和q是随机的，所以t大小也不确定，三位数的是没问题了。  [/quote] 你可以看下，失败的时候那个m值是不是比成功的m值小？

user: user-0
content: 引用 7 楼 zhuobattle 的回复:你可以看下，失败的时候那个m值是不是比成功的m值大？（上面打错了） 这个的关键是要注意t的长度吗？

user: user-1
content: 引用 2 楼 t59616 的回复:[quote=引用 1 楼 zhuobattle 的回复:] RSA有长度限制的，你的D d N要足够长。 不太懂，能详细解释下吗？RSA的长度手什么限制，n=p*q, ed=1 mod(n),这些长度都要多少bit才能满足RSA的安全性？[/quote] RSA真实实现是大整数来做（比如N长度1024bits)的，你用int来做，根本没有什么安全性而言。 一般长度起码要在96bits以上的长度.明文长度有如下关系： 根据不同的padding格式， RSA_PKCS1_PADDING RSA_size-11 RSA_NO_PADDING RSA_size-0 RSA_X931_PADDING RSA_size-2。 举个例子吧，一般密钥1024bits(128 Bytes),那么明文长度不能超过128-11 = 117 Bytes.(采用PKCS1_padding) 所以一般RSA不会用在太长的数据加密上，一般用在签名或者小部分交换加密，如果你真要用 大块数据加密，那么你自己分片吧。

user: user-0
content: 引用 3 楼 zhuobattle 的回复:[quote=引用 2 楼 t59616 的回复:] [quote=引用 1 楼 zhuobattle 的回复:] RSA有长度限制的，你的D d N要足够长。 不太懂，能详细解释下吗？RSA的长度手什么限制，n=p*q, ed=1 mod(n),这些长度都要多少bit才能满足RSA的安全性？[/quote] RSA真实实现是大整数来做（比如N长度1024bits)的，你用int来做，根本没有什么安全性而言。 一般长度起码要在96bits以上的长度.明文长度有如下关系： 根据不同的padding格式， RSA_PKCS1_PADDING RSA_size-11 RSA_NO_PADDING RSA_size-0 RSA_X931_PADDING RSA_size-2。 举个例子吧，一般密钥1024bits(128 Bytes),那么明文长度不能超过128-11 = 117 Bytes.(采用PKCS1_padding) 所以一般RSA不会用在太长的数据加密上，一般用在签名或者小部分交换加密，如果你真要用 大块数据加密，那么你自己分片吧。   [/quote] 其实我也很奇怪，有的时候t是1024bit，解密m是1024bit的就成功，有的时候就失败了，因为我设置的p和q是随机的，所以t大小也不确定，三位数的是没问题了。

user: user-2
content: 引用Quote: 引用 1 楼 zhuobattle 的回复: RSA有长度限制的，你的D d N要足够长。 不太懂，能详细解释下吗？RSA的长度手什么限制，n=p*q, ed=1 mod(n),这些长度都要多少bit才能满足RSA的安全性？ RSA真实实现是大整数来做（比如N长度1024bits)的，你用int来做，根本没有什么安全性而言。 一般长度起码要在96bits以上的长度.明文长度有如下关系： 根据不同的padding格式， RSA_PKCS1_PADDING RSA_size-11 RSA_NO_PADDING RSA_size-0 RSA_X931_PADDING RSA_size-2。 举个例子吧，一般密钥1024bits(128 Bytes),那么明文长度不能超过128-11 = 117 Bytes.(采用PKCS1_padding) 所以一般RSA不会用在太长的数据加密上，一般用在签名或者小部分交换加密，如果你真要用 大块数据加密，那么你自己分片吧。 +1

user: user-0
content: 引用 1 楼 zhuobattle 的回复:RSA有长度限制的，你的D d N要足够长。 不太懂，能详细解释下吗？RSA的长度手什么限制，n=p*q, ed=1 mod(n),这些长度都要多少bit才能满足RSA的安全性？

user: user-1
content: RSA有长度限制的，你的D d N要足够长。