差分字节数组与Java文件

差分字节数组与Java文件,java,android,hash,bytearray,Java,Android,Hash,Bytearray,我正在读取RFID芯片上的标签,我想把它们发送到服务器上。当我在转换成文件并通过ftp上传之前对字节数组进行散列时,我得到的散列值与上传文件的散列值不同。 这就是我用来散列字节数组的内容: public static byte[] SHAsum(byte[] convertme) throws NoSuchAlgorithmException { MessageDigest md = MessageDigest.getInstance("S

我正在读取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);

从FTP读取文件时,如果使用UTF-8编码正确读取了文件,则可能使用了字节顺序标记BOM,一些供应商使用此标记通知实际数据的开始,而一些供应商则不使用此标记,我不确定您为什么使用SHA-256。但我认为如果您没有使用正确的编码类型,也可能存在问题

从ftp读取文件后,您可以查看此额外字符,如果您看到,则可能需要处理该文件

不幸的是,您必须在代码中处理此问题,从ftp获取此字符串后,请删除此字符串

private String removeUTF8BOM(String s) {
    if (s.startsWith( "\uFEFF"))
{
        s = s.substring(1);
    }
    return s;
}

这将有助于有一个内容的例子,与2哈希。我分析了内容。有时会添加字节,然后文件会继续运行。