如何在RSA中加密大于N的数字?
这里有一个例子:
我们设定 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=52 mod 55。
我知道如何加密一个小于 N 的数字,但如果数字大于 N,该怎么加密呢?
我知道如果 X 大于 N,我们应该把 X 拆分成几个部分,然后分别加密,但我不知道 RSA 是怎么拆分的。
附加问题:
如何在 IOS 或 Python 上用 RSA 加密一个文件?
2 个回答
3
你不应该用RSA来加密长消息。
正确的方法是使用混合加密:
- 首先生成一个随机的AES密钥,用AES来加密实际的数据。最好使用一种认证模式,比如AES-GCM。
- 然后用RSA加密这个AES密钥。这个密钥(126到256位)足够小,可以放在一个RSA块里。例如,使用小而且相对弱的1024位RSA密钥,你大约有500到700位可以用来加密实际的数据(剩下的部分是用来填充的)。
最终的密文包含了RSA加密的AES密钥和用AES加密的文件。
为了安全起见,这里一定要使用填充,特别是OAEP。其他大多数填充方式,包括流行的PKCS#1v1.5填充,都是不安全的。
不要试图把文件分成块,然后用RSA加密。因为没有标准的方法可以这样做,这其实是个坏主意。