差分字节数组与Java文件
我正在读取RFID芯片上的标签,我想把它们发送到服务器上。当我在转换成文件并通过ftp上传之前对字节数组进行散列时,我得到的散列值与上传文件的散列值不同。 这就是我用来散列字节数组的内容:差分字节数组与Java文件,java,android,hash,bytearray,Java,Android,Hash,Bytearray,我正在读取RFID芯片上的标签,我想把它们发送到服务器上。当我在转换成文件并通过ftp上传之前对字节数组进行散列时,我得到的散列值与上传文件的散列值不同。 这就是我用来散列字节数组的内容: public static byte[] SHAsum(byte[] convertme) throws NoSuchAlgorithmException { MessageDigest md = MessageDigest.getInstance("S
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);
从FTP读取文件时,如果使用UTF-8编码正确读取了文件,则可能使用了字节顺序标记BOM,一些供应商使用此标记通知实际数据的开始,而一些供应商则不使用此标记,我不确定您为什么使用SHA-256。但我认为如果您没有使用正确的编码类型,也可能存在问题 从ftp读取文件后,您可以查看此额外字符,如果您看到,则可能需要处理该文件 不幸的是,您必须在代码中处理此问题,从ftp获取此字符串后,请删除此字符串
private String removeUTF8BOM(String s) {
if (s.startsWith( "\uFEFF"))
{
s = s.substring(1);
}
return s;
}
这将有助于有一个内容的例子,与2哈希。我分析了内容。有时会添加字节,然后文件会继续运行。