我正在尝试使用 RSA 编写一个加密程序,需要能够将明文转换为long
。显然,明文中必须包含不仅仅是数字的内容,所以使用Long.parseLong()
不是一个解决方案。我找到了这个,它解释了如何用这种方法将char
数组转换为long
,但我不确定如何将其转换回char
数组(或String
)。我从上述网站获得的代码如下:
public long charArrayToLong(char[] bi){
long len = bi.length;
long sum = 0;
long tmp, max = len - 1;
for (int i = 0; i < len; ++i) {
tmp = bi[i] - '0';
sum += tmp * Math.pow(2, max--);
return sum;
}
此代码用于将char
数组转换为长整型,而不依赖于数组中仅有的数值char
,但我还需要一种将其转换回来的方法。
具体来说,我要寻找的是:我需要根据其 ASCII 值将char
中的每个 转换为一个数字,根据其在 中的位置的幂乘以该数字,将这些数字相加以获得纯文本变量,然后反转操作以将其转换为另一种方式。String
String
long
我的预期输入是String
纯文本(例如“敏捷的棕色狐狸跳过了懒狗”)。我的预期输出是长整型,其中包含String
嵌入数字中的每个字符的值。
我之所以需要这样做,是因为我需要String
用公式来指数化一个数字,而不是c = m ^ e % n
。由于m
是明文消息,我需要将其转换为数字,这样我就可以将其取 的幂e
,即公钥。
要将四个值转换
char
为 long(适用于任意字符(不仅仅是 ASCII)),您可以这样做正确解密后,您的长字符串中就会有一个有效的字符序列,您可以使用
...尽管您可能希望将长整型转换为字节序列,然后将其转换为具有其自己风格的字符串。
(要真正正确地执行此操作,需要经历更多阶段:将整个字符串转换为 UTF-8 字节,将它们填充为适当数量的值,进行数学运算,将数学结果转换为字节,将其 Base64 输出,然后在另一端反向执行所有这些步骤。)
位移!