base64 java .net_Java和.NET:Base64转换混乱

由于您编码的数据是加密数据 – 随机数据,其中任何字节可以是0到255,并且在加密状态下,没有字符或文本含义,您需要将此信息视为-lets调用它 – 真正的二进制数据. Java和.NET都通过各自的字节数组原语完全支持真正的二进制数据.

如您所知,base64编码是将真正的二进制数据(范围为0到255)转换为稍大的二进制数据数组的过程(其中每个字节保证与32位之间的ASCII可打印字符具有相同的值.和126).我们称这个编码二进制文件.然后可以安全地将编码的二进制文件转换为文本,因为几乎每个已知字符集都与可打印的ASCII字符集(32到126)一致.

所以Java和VB.NET片段的主要问题是你试图在Java中使用文本原语 – char和String; VB.NET中用于存储真正二进制数据的字符串.一旦你这样做,为时已晚.没有办法可靠地将其转换回字节数组,因为文本原语并不是为了安全地存储和检索二进制数据而设计的.有关为何如此的更多信息,请阅读The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!)

幸运的是,修复很简单.对于Java,不要使用char和String来存储二进制数据.将数据直接放入字节数组中.请尝试以下方法:

byte [] bt = new byte[1];

bt[0] = (byte) 153;

String result = Base64.encodeToString(bt, Base64.DEFAULT);

我得到mQ ==

在VB.NET中,修复在概念上是相同的.不要使用String.使用字节数组.

Dim bytes() As Byte = New Byte() {153}

Dim result As String = Convert.ToBase64String(bytes)

再次 – 答案是mQ ==

最后,在编码之后,使用字符串完全没问题.您的字符在ASCII子集中,字符串和字节数组之间的任何转换都不会损坏数据,因为所有字符集都与ASCII子集一致.

请记住,您将以相反的顺序出现相同的问题 – 解码.您将解码为字节数组,此时您将返回真正的二进制数.从这一点开始,数据绝不能存储为字符串 – 直到你完成它 – ex.将其解密回原始明文.

希望这可以帮助.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值