在RSA中,消息长度不应超过(keysize / 8)字节。为什么会有这样的限制?在将其输入RSA算法之前转换为什么输入(比如说“abcde”)以及它在何处考虑输入字符串“abcde”的大小?
答案 0 :(得分:3)
RSA算法基本上是:
Ciphertext = (Plaintext e) mod n
并解密:
Plaintext = (Ciphertext d) mod n
e
和n
组成了您的公钥,d
和n
组成了您的私钥。 e
通常是少数常见值之一,例如65537,n
是两个大素数p
和q
的乘积,它们应该是唯一的,并定义密钥长度(例如1024位)。用于解密密文的d
值使用e
,p
和q
计算。如果您感兴趣,维基百科有更多细节:http://en.wikipedia.org/wiki/RSA_(algorithm)。在RSA算法中使用时,您的明文基本上被视为一个大整数。
如果你不熟悉模运算符,它基本上是左边被右边划分的余数。例如。 17 mod 5 = 2
为5精确划分17次(3 * 5 = 15
),留下余下的17 - 15 = 2
)。
由于模运算符的定义,a mod b
的结果始终小于b
。鉴于此,以及解密值是执行mod n
操作的结果这一事实意味着当解密时,得到的明文值将始终小于n。因此,为了使您最初加密的实际明文,输入必须小于n
。
为了保证这一点,消息被限制为具有比n
更少的位(“数字”)。由于n
中的位数是密钥大小,因此必须小于keysize bits
或keysize / 8 bytes
(因为一个字节中有8位)。