【发布时间】:2013-03-08 04:39:55
【问题描述】:
我在解释文件时遇到问题。文件构建如下:
“姓名”-@-“日期”-@-“作者”-@-“签名”
签名是一个字节数组。当我读回文件时,我将其解析为字符串并对其进行拆分:
myFileInpuStream.read(fileContent);
String[] data = new String(fileContent).split("-@-");
如果我查看 var fileContent,我发现字节都很好。 但是当我尝试获取签名字节数组时:
byte[] signature= data[3].getBytes();
有时我会得到错误的 63 值。我尝试了一些解决方案:
new String(fileContent, "UTF-8")
但没有运气。有人可以帮忙吗? 签名不是固定长度,因此我无法对其进行硬编码...
一些额外的信息:
原始签名:
[48, 45, 2, 21, 0, -123, -3, -5, -115, 84, -86, 26, -124, -112, 75, -10, -1, -56, 40, 13, -46, 6, 120, -56, 100, 2, 20, 66, -92, -8, 48, -88, 101, 57, 56, 20, 125, -32, -49, -123, 73, 96, 76, -82, 81, 51, 69]
文件内容(读取后的变量):
... 48、45、2、21、0、-123、-3、-5、-115、84、-86、26、-124、-112、 75, -10, -1, -56, 40, 13, -46, 6, 120, -56, 100, 2, 20, 66, -92, -8, 48, -88, 101, 57, 56, 20, 125, -32, -49, -123, 73, 96, 76, -82, 81, 51, 69]
签名(拆分和getBytes()之后):
[48, 45, 2, 21, 0, -123, -3, -5, 63, 84, -86, 26, -124, 63, 75, -10, -1, -56, 40, 13, -46, 6, 120, -56, 100, 2, 20, 66, -92, -8, 48, -88, 101, 57, 56, 20, 125, -32, -49, -123, 73, 96, 76, -82, 81, 51, 69]
【问题讨论】:
-
您正在对加密数据使用字符编码。请参阅我的帖子的编辑:您必须将加密数据视为 only 字节,并在将其视为字符串之前对其进行解密(通过使用解码器)。您不能将加密签名读取为字符串并将其拆分。