2014-07-21 55 views
0

我正在閱讀RFID芯片的標籤,我想將它們發送到服務器。當我在轉換爲文件並通過ftp上傳之前對字節數組進行散列處理時,我得到的散列值與上傳文件的散列值不同。 這是我在用的散列字節數組:差異字節數組和文件Java

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

這將有助於有一個內容的例子,2哈希。 – njzk2

+0

我分析了內容。有時會添加字節,然後文件繼續運行。 – olpanis

回答

0

在閱讀從FTP文件,如果文件已經正確地使用UTF-8編碼讀取,那麼它可能已經使用字節順序標記(BOM),一些廠商利用這個通知實際DAT的開始一個和一些不,我不知道爲什麼你使用SHA-256.但我認爲它可能也有問題,如果你不使用正確的編碼類型。

閱讀從FTP文件後,可以查看到看到這個額外的性格特徵,如果你看到那麼你可能需要HANDL這一點。

不幸的是,你必須在代碼中處理這個問題,你從FTP此字符串後,刪除此。

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