java从解密中获取RSA中的明文

时间:2014-04-18 06:24:38

标签: java encryption cryptography rsa

我正在使用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 。这是第一个问题。如何解决这个问题?

从解密中获取明文数字后,我必须合并所有明文数字,然后将它们转换成字母。

这是第二个问题:我混淆了如何将明文数字转换成明文字母。

我很困惑,因为我没有分隔数字的分隔符。

因此,明文必须成功转换为:保存女王

我能做些什么来解决它们?

1 个答案:

答案 0 :(得分:2)

RSA适用于数字。这与例如不同。适用于位和字节的AES。因此,在计算过程中,04141相同。但是,您明确将明文拆分为3位数值。所以你唯一要做的就是在左边添加0个字符,直到你有3个数字。唯一剩下的就是最终的数字。您可以使用零填充并添加最终(加密?)值,该值指定最后添加了多少零。

现在还有另一个问题;你没有分隔符。这可以通过使用字符的八进制编码来解决。检查此ASCII table并查看八进制。在这种情况下的另一个好处是每个解密值可以获得一个字符。

显然你也可以用每个十进制表示左键填充零,直到你在&#34中保存每个字符3个十进制字符;保存女王"。