如何在RSA上加密大于N的数字?

时间:2014-03-03 07:55:37

标签: python ios encryption rsa public-key-encryption

以下是一个例子:

p = 11,q = 5,N = p * q = 55,选择加密指数e = 3,所以d = e ^ -1 mod(p-1)(q-1)= 27。

如果我想加密x = 13,则x ^ e = 13 ^ 3 = 52mod55。

我理解如何加密小于N的数字,但是如何加密大于N的数字?

我知道如果X大于N,我们应该将X分解成几个部分并分别加密它们,但我不知道RSA如何分解它?

可选问题:

如何在IOS或python上使用RSA加密文件?

2 个答案:

答案 0 :(得分:2)

RSA算法根本不处理消息的分解。它只加密固定大小的整数。这种加密算法称为block cipher,因为它以固定大小的“块”加密消息。

块块密码本身通常不指定块的获取方式。因此,必须决定如何拆分邮件。将整数分解为固定大小的块的一种可能方法是将其转换为基础N,并分别加密每个数字。

请注意,您应从其他数字独立加密 ,因为这样做不安全。事实上,这样做相当于使用单字母密码。 。您可以使用块密码的不同操作模式来安全地加密多个块。您应该阅读wikipedia页面以了解它们。

答案 1 :(得分:2)

您没有使用RSA加密长消息。

正确的方法是使用hybrid encryption代替:

  • 生成随机AES密钥,使用AES加密实际数据。优选地使用诸如AES-GCM的认证模式。
  • 使用RSA加密AES密钥。该密钥(126到256位)足够小以适合一个RSA块。例如,使用小而弱的1024位RSA密钥,实际数据有500-700位(其余部分由填充消耗)。
  • 密文由RSA加密的AES密钥和AES加密文件组成。

    在此处应用填充对于安全性至关重要,即OAEP。大多数其他填充,包括流行的PKCS#1v1.5填充都不安全。

请勿尝试将文件拆分为使用RSA加密的块。没有标准的方法可以做到这一点,因为这是一个坏主意。