首页 > 解决方案 > 使用 C = M^e mod n 使用 RSA 加密一串字母

问题描述

嗨 :) 我搜索了一下以了解这个问题的含义:使用参数 p = 13、q = 19、e = 5 加密单词“SECURITY”。十六进制形式的相应密文是什么?

我在每个字母对应的 ASCII 值上使用了 cipher = M^e mod (pq)。所以对于 S,我写了:85^5 mod 247 = 239。然后我继续将 239 转换为十六进制形式:“EF”。

这是正确的方法吗?一个字母一个字母地做,最后把所有的十六进制加在一起得到字符串“EFB388CE3E639121”?

还是应该将每个字母的密码加在一起,然后将其转换为十六进制形式?

C(S) = 239, C(E) = 179, C(C) = 136 C(U) = 206 
C(R) = 62,  C(I) = 99,  C(T) = 145, C(Y) = 33



Add them together: 239+179+136 .. = 1099.
Convert 1099 to hexadecimal = 44B. 

在我看来,将它们加在一起似乎毫无意义,因为几个字母可以构成 1099 的总值,这会使解密变得困难,但我只想确定 :)

标签: cryptographyrsa

解决方案


是的,您实际上可以通过这种方式使用 RSA 进行加密,但请注意生成的密文是可延展的(可以通过对明文或密文消息进行数字签名来修复)。它类似于在 ECB 模式下执行例如 AES。通常 RSA 加密(如 PKCS#1 标准中所指定)是随机的,但您的不是,因此 ECB 模式的相同问题仍然存在:相同的字母将被加密为相同的值,这将使其不安全并且容易受到频率分析. 这当然是RSA密钥大小的明显问题。RSA要求输入消息的特定填充是安全的。

请注意,您需要区分字母的密文。这意味着您应该始终使用相同数量的字节/十六进制来编码表示密文的数字。这意味着应该保留前导零。同样,这也发生在 PKCS#1 标准中(查找将整数转换为字节的 I2OSP)。

请注意,在现实生活中,我们使用混合密码系统,我们加密随机对称密钥而不是消息本身,然后继续使用该随机密钥加密消息。然后将打包的密钥和密文一起发送给接收者。


推荐阅读