RSA 中的消息长度限制

Ash*_*win 1 ssl rsa

在 RSA 中,消息长度不应超过 (keysize/8) 字节。为什么会有这样的限制呢?输入(例如“abcde”)在输入 RSA 算法之前转换成什么?它在哪里考虑输入字符串“abcde”的大小?

Iri*_*ium 5

RSA算法本质上是:

密文 = (明文e ) mod n

并解密:

明文 = (密文d ) mod n

en一起组成你的公钥, 和dn组成你的私钥。e通常是几个常见值之一,例如 65537,n是两个大素数的乘积p,并且q对您来说应该是唯一的,并定义密钥长度(例如 1024 位)。d用于解密密文的 值是使用ep和计算得出的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。由于 in 的位数n是密钥大小,因此它必须少于keysize bits, 或keysize / 8 bytes(因为一个字节中有 8 位)。

  • 它将被转换为数字。如何做到这一点取决于“ancde”代表什么。(例如,大写字母合法吗?数字吗?标点符号吗?)输入字符串如何转换为数字(或者输入是字符串)不是 RSA 算法的一部分,而是 RSA 算法的一部分。是具体实施的。例如,如果您愿意,您可以用“01”表示“a”,用“02”表示“b”等,并以十进制表示。您可以使用二进制的 8 位 ASCII。 (2认同)
  • 有。DES,例如,[加密 64 位](http://en.wikipedia.org/wiki/Block_cipher#Lucifer_.2F_DES)。您必须将其构建到密码系统中才能加密更大的数据块或数据流。通常,AES 与填充一起使用来加密对称密码的密钥,从而可以加密任意大小的块。(例如流密码或具有链接模式和更多填充的密码。)您必须记住,RSA 和 DES 之类的东西不是密码系统。它们是算法、原语。它们是我们构建完整系统的小部件。 (2认同)