java 加密为string_关于加密:在Java中,如何正确地将字节[]转换为String to Byth[]?...

我要将TEA加密的结果(字节[])转换为字符串,然后再次将其转换为字节[],并检索相同的字节[]。

//Encryption in the sending side

String stringToEncrypt ="blablabla"

byte[] encryptedDataSent = tea.encrypt(stringToEncrypt.getBytes());

String dataToSend = new BigInteger(encryptedDataSent).toString());

//Decryption side in the reception side

byte[] encryptedDataReceived = new BigInteger(dataToSend).toByteArray();

但是,当我尝试以下方法时:

System.out.println(new String(encryptedDataSent));

System.out.println(new String(encryptedDataReceived));

boolean equality = Arrays.equals(encryptedDataReceived,encryptedDataSent);

System.out.println("Are two byte arrays equal ? :" + equality);

输出是:

&h?7?"?PAtj??I??Z`H-jK?????f

&h?7?"?PAtj??I??Z`H-jK?????f

Are two byte arrays equal ? : false

所以,看起来两个字节[]在打印时是相同的,但它们与我们看到的"假"不完全相同,这是我在之后执行的解密的一个问题。

我还试图发送一个String with new String(byte[]),但当我们想把它转换回一个字节〔0〕时,它也有同样的问题。

我希望在开始和转换之后有完全相同的字节[]->string->byte[]

你是否有解决方案或理解我在转化过程中所做的错误?

查看这两个链接,可能会有所帮助:字符串到字节,反之亦然,另一个链接

不要试图从byte[]转换为String,就像它是常规编码的文本数据一样——它不是。它是一个任意字节数组。

最简单的方法是将其转换为base64或hex,这将导致ASCII文本可以可逆地解码回相同的二进制数据。例如,使用公共域base64编码器:

String dataToSend = Base64.encodeBytes(encryptedDataSent);

...

byte[] encryptedDataReceived = Base64.decode(receivedText);

谢谢你的回答。但是,如果我需要将byte[]数据写入文本文件,然后能够复制文本,将其粘贴到字段中,并以什么格式检索数据,我应该将byte[]数据存储在文本文件中?

@R&233;DABK:我会使用base64来实现这一点,正如我所展示的那样。

谢谢你@jonsket成功了!base64编码给了我这样一个字符串(aaaksvmmva75daqf+xufydnbdrhljlsv8o+fl7zofe5rdeov5eixrq‌&8203;bgy2fgqvvwq==),然后我又能将它转换为原始字节[]。为什么这个字符串编码对于正确的字节转换有效,而不是其他的?疑惑的。。。

尝试在解密中使用byte[]encode=base64.encode(bytestostore,base64.default)

不能。String不是二进制数据的容器。它是一个utf-16字符的容器。字符和字节之间的往返没有任何保证。

你不能这样做,但是你不能把任意的二进制数据表示为文本,然后再将其转换回相同的二进制数据的想法显然是有缺陷的…十六进制,base64,base32…有很多种方法。

尝试显式指定字符集。UTF-8适用于主要情况:

public static void main(String[] args) {

String in ="幸福";

try {

byte[] bytes = in.getBytes("utf-8");

String out = new String(bytes,"utf-8");

System.out.println(in +" ->" + out);

System.out.println("equals:" + out.equals(in));

} catch (UnsupportedEncodingException unsupportedEncodingException) {

// do something

}

}

请注意,当字节数组保持不变时,您将得到完全相同的结果。

不,当数据是任意二进制数据,而不是UTF-8编码文本时,UTF-8是不好的。OP希望将加密结果转换为文本。这不是UTF-8编码的文本。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值