我正在尝试模拟RSA加密和解密我想要的加密方法
- 获取字符串
- 转换为byte[]
- 执行 RSA 函数(我将在下面的代码中展示)
- 将字节 [] 作为字符串返回
我现在拥有的并且它可以工作,但是可以接收和返回字节[](不是字符串)
public byte[] encrypt (byte[] message){
byte [] t= ((new BigInteger(message)).modPow(e, N)).toByteArray();
return (t);
}
我想要的解密方法
- 接收 encrypt() 返回的字符串
- 将其转换为byte[]
- 对字节[]进行RSA运算,得到原始字节[]
返回原始字符串 到目前为止我所拥有的
public byte [] decrypt (byte [] message) { byte[] data= ((new BigInteger(message)).modPow(d, N)).toByteArray(); return data; }
这两种方法都有效,但是我需要在我的主类中创建一个 byte[] 并使用 byte[]Str.getbyte() 进行加密并使用 new String(byte[]) 进行加密......
我希望我的 main 只处理字符串。当我使用这样的解密(字符串消息)代码时
public String decrypt (String message) {
byte[] data= ((new BigInteger(message.getBytes())).modPow(d, N)).toByteArray();
return data.toString();
}
它不像解密(byte [] message)那样给我原始文本,但它返回类似 B@79f0a8b
我确信我错过了与将文本转换为 byte[] 相关的内容,反之亦然,但我不确定我错过了什么。
我很想听听你的消息。
(抱歉我的英语不好)
最佳答案
加密结果的字符串值的原因是什么?如果您尝试搜索:byte[] to String java,您可以轻松地将 byte[] 转换为 String 并将其反转。 。 但真的有这样做的理由吗?
也许你想要这样的东西:
public byte[] encrypt (String message);
public String decrypt (byte[] message);
然后您将使用字符串输入进行操作,并能够获得字符串解密结果。但是没有理由对字符串中的加密数据进行操作,它看起来像是冗余操作:您的字符串将不可读,并且算法将使用 byte[]。只需转换加密输入并解密输出即可。
关于java - 从字符串到字节数组,然后再到字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22191485/