关于加密:java从解密中获取RSA中的明文

java get the plaintext in RSA from decryption

我用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

乍一看,它看起来工作得很好。但事实上,事实并非如此。

找第六个街区。应该是041,但看起来是41。这是第一个问题。如何解决这个问题?

从解密中获得明文号码后,我必须合并所有明文号码,然后将它们转换为字母。

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

我混淆了,因为我没有分隔符来分隔数字。

因此,明文必须成功转换为:save the queen

我能做些什么来解决这些问题?


RSA致力于数字。这与处理位和字节的AES不同。因此,在计算过程中,04141相同。但是,您显式地将纯文本拆分为3个数字值。所以你唯一要做的就是在左边加上0个字符,直到你有3个数字。只剩下最后一个数字了。你可以用零填充并添加一个最后的(加密的?)值,指定在末尾添加了多少零。

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

很明显,您也可以用零填充每个十进制表示,直到在"save the queen"中每个字符有3个十进制字符。