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

java从解密中获取RSA中的明文,java,encryption,cryptography,rsa,Java,Encryption,Cryptography,Rsa,我正在使用java将RSA加密集成到一个应用程序中。但我这里有两个问题 我按照RSA算法完成了所有步骤 例如: 我生成素数p和q,然后计算它们得到加密和解密密钥 p=71,q=73,n=5183 加密密钥:(e,n)=(535183) 解密密钥:(d,n)=(1997,5183) 我使用纯文本:拯救女王 然后,我根据ASCII将所有字母转换成数字 因此,转换数字:83971181013284104101328111710101110 然后,我将所有数字分成n位数的块。比如说3位数的块 因此,除法

我正在使用java将RSA加密集成到一个应用程序中。但我这里有两个问题

我按照RSA算法完成了所有步骤

例如:

我生成素数p和q,然后计算它们得到加密和解密密钥

p=71,q=73,n=5183

加密密钥:(e,n)=(535183)

解密密钥:(d,n)=(1997,5183)

我使用纯文本:
拯救女王

然后,我根据ASCII将所有字母转换成数字

因此,转换数字:
83971181013284104101328111710101110

然后,我将所有数字分成n位数的块。比如说3位数的块

因此,除法数字必须是:
8397118101328410410132811171110110

对于加密,我得到了密文号码:
4451853 2353 1269 1946 4583 1726 4643 208 1665 1665 3360

之后,我解密了密文。我得到了明文号码:
8397118101328414113281110110

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

看看第六街区。它应该是041,但它似乎是41。这是第一个问题。如何解决这个问题

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

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

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

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


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

RSA适用于数字。这与工作在位和字节上的AES不同。因此,在计算过程中,
041
41
相同。但是,您可以显式地将明文拆分为3位数的值。因此,您唯一需要做的就是在左侧添加
0
字符,直到您有3位数字。只剩下最后的数字了。您可以用零填充并添加一个最终(加密?)值,该值指定在末尾添加了多少个零

现在又有一个问题,;您没有分隔符。这可以通过使用字符的八进制编码来解决。检查此项并查看Octal下的内容。这种情况下的另一个优点是,每个解密值可以得到一个字符


显然,您也可以将每个十进制表示形式保留为零,直到在“拯救女王”中每个字符获得3个十进制字符为止。

这很有意义。第一个问题已由您的提示解决。对于第二个问题,你的意思是我添加零作为分隔符吗?再说一遍:这都是关于数字的!你如何让这些数字彼此分开,这取决于你。例如,您可以像在原始帖子中一样使用空格。如果您想要更紧凑的格式,那么使用二进制格式,比如ASN.1-这正是RSA参数在X.509证书中存储的方式。不,如果每个字符都单独加密,则不需要这样做。你解密它,获取字符并将其附加到其余字符中。