区别字节数组和文件Java

时间:2014-07-21 19:42:15

标签: java android hash bytearray

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

1 个答案:

答案 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;
}