在 RSA 中,消息长度不应超过 (keysize/8) 字节。为什么会有这样的限制?输入(比如“abcde”)在将其输入 RSA 算法之前转换成什么?它在哪里考虑输入字符串“abcde”的大小?
最佳答案
RSA算法本质上是:
Ciphertext = (Plaintext e) mod n
并解密:
Plaintext = (Ciphertext d) mod n
e
和 n
一起组成你的公钥, d
和 n
组成你的私钥. e
通常是几个常见值之一,例如65537,n
是两个大质数p
和q
的乘积,应该是你唯一的,并且定义了 key 长度(例如1024位)。用于解密密文的d
的值是使用e
、p
和q
计算的。如果您有兴趣,维基百科有更多详细信息:http://en.wikipedia.org/wiki/RSA_(algorithm) .在 RSA 算法中使用时,您的明文基本上被视为一个大整数。
如果您不熟悉模运算符,它基本上就是左侧除以右侧的余数。例如。 17 mod 5 = 2
因为 5 恰好将 17 除 3 次(3 * 5 = 15
),余数为:17 - 15 = 2
>).
由于模运算符的定义,a mod b
的结果总是小于b
。鉴于此,并且解密值是执行 mod n
操作的结果这一事实意味着解密时,生成的明文值将始终小于 n。因此,要使这成为您最初加密的实际明文,输入必须小于 n
。
为了保证这一点,消息的位数(“数字”)被限制为少于 n
。由于 n
中的位数是 key 大小,因此它必须少于 keysize 位
,或 keysize/8 字节
(因为有一个字节中有 8 位)。
关于ssl - RSA 中的消息长度限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10061626/