我正在阅读RFID芯片的标签,我想将它们发送到服务器。当我在转换成文件并通过ftp上传之前对字节数组进行哈希处理时,我获得的哈希值与上传文件的哈希值不同。 这是我用于散列字节数组的方法:
public static byte[] SHAsum(byte[] convertme)
throws NoSuchAlgorithmException {
MessageDigest md = MessageDigest.getInstance("SHA-256");
return md.digest(convertme);
}
private static String byteArray2Hex(final byte[] hash) {
Formatter formatter = new Formatter();
for (byte b : hash) {
formatter.format("%02x", b);
}
return formatter.toString();
}
这就是我上传文件的方式:
private byte[] EfSodBin;
try {
con.connect(IP, 21);
con.login(FTP_USER, FTP_PW);
InputStream isDG2 = new ByteArrayInputStream(DG2);
InputStream isSOD = new ByteArrayInputStream(EfSodBin);
con.makeDirectory(DocNu);
con.storeFile(DocNu + "/DG2.bin", isDG2);
con.storeFile(DocNu + "/SOD.bin", isSOD);
Log.d("FTP", "files uploaded");
con.logout();
} catch (SocketException e2) {
// TODO Auto-generated catch block
e2.printStackTrace();
} catch (IOException e2) {
// TODO Auto-generated catch block
e2.printStackTrace();
}
解决方案是在con.login之后添加以下内容:
con.setFileType(FTP.BINARY_FILE_TYPE);
答案 0 :(得分:0)
从FTP读取文件时,如果使用UTF-8编码正确读取文件,则可能使用了字节顺序标记(BOM),有些供应商使用它来通知实际数据的开始,有些不这样做,我不知道你为什么使用SHA-256。但我认为如果你不使用正确的编码类型它也可能有问题。
从ftp读取文件后,你可以查看这个额外的字符,如果你看到那么你可能需要处理它。
不幸的是你必须在代码中处理这个问题,从ftp获取此字符串后,删除它。
private String removeUTF8BOM(String s) {
if (s.startsWith( "\uFEFF"))
{
s = s.substring(1);
}
return s;
}