我正在使用java在应用程序中集成RSA加密。但我这里有两个问题。
我按照RSA算法执行了所有步骤。
例如:
我生成素数p和q,然后我计算它们以获得加密和解密密钥。
p = 71,q = 73,n = 5183
加密密钥:(e,n)=(53,5183)
解密密钥:(d,n)=(1997,5183)
我使用了明文:Save The Queen
然后,我根据ASCII将所有字母转换为数字。
因此,转换数字为:839711810132841041013281117101101110
之后,我将所有数字分成n位数块。让我们说3位数块。
因此,除以数字必须为:839 711 810 132 841 041 013 281 117 101 101 110
对于加密,我得到了密文号码:4451 853 2353 1269 1946 4583 1726 4643 208 1665 1665 3360
之后,我解密了密文。我得到了明文号:839 711 810 132 841 41 13 281 117 101 101 110
乍一看,它看起来效果很好。但实际上,事实并非如此。
看看第6区。它应该 041 ,但它出现 41 。这是第一个问题。如何解决这个问题?
从解密中获取明文数字后,我必须合并所有明文数字,然后将它们转换成字母。
这是第二个问题:我混淆了如何将明文数字转换成明文字母。
我很困惑,因为我没有分隔数字的分隔符。
因此,明文必须成功转换为:保存女王
我能做些什么来解决它们?
答案 0 :(得分:2)
RSA适用于数字。这与例如不同。适用于位和字节的AES。因此,在计算过程中,041
与41
相同。但是,您明确将明文拆分为3位数值。所以你唯一要做的就是在左边添加0
个字符,直到你有3个数字。唯一剩下的就是最终的数字。您可以使用零填充并添加最终(加密?)值,该值指定最后添加了多少零。
现在还有另一个问题;你没有分隔符。这可以通过使用字符的八进制编码来解决。检查此ASCII table并查看八进制。在这种情况下的另一个好处是每个解密值可以获得一个字符。
显然你也可以用每个十进制表示左键填充零,直到你在&#34中保存每个字符3个十进制字符;保存女王"。