2011-12-13 84 views
0

簽名和簽名數據有什麼區別?我需要把它們傳遞給對方。java簽名和簽名數據

我有代碼:

private static byte[] sign(byte[] data) { 
    byte[] signedData = null; 

    try { 
     java.security.KeyStore keyStoreFile = java.security.KeyStore.getInstance("PKCS12"); 
     keyStoreFile.load(new FileInputStream("keyStore.pfx"), 
       "password".toCharArray()); 

     PrivateKey privateKey = (PrivateKey) keyStoreFile.getKey(
       "alias", "password".toCharArray()); 

     Signature dsa = Signature.getInstance("SHA1withRSA"); 
     dsa.initSign(privateKey); 
     dsa.update(data); 
     signedData = dsa.sign(); 

    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
    return signedData; 
} 

所以是signedData簽名或簽名的數據?我需要生成併發布它們,但我不明白它們之間的區別。請指教。謝謝。

回答

0

從Signature.sign的javadoc的:

返回所有已更新數據的簽名字節。簽名的格式取決於基礎簽名方案。

所以這絕對不是簽名數據,而只是使用update方法提供的數據簽名。

+0

謝謝,gabuzo,那我該如何簽署數據?你有代碼示例嗎?因爲我在哪裏看,我只找到如何做一個簽名:| – innspiron

0

在您的示例中,data是原始數據,您要簽名。 signedData是簽名數據。如果你使用相同的私鑰和相同的data,你將永遠得到相同的signedData

一旦你捆綁在一起datasignedData我認爲你可以調用結果包「簽署數據」。原始數據是您想要提供的數據,簽名數據是您或其他人如何確認原始數據未被更改的方式。換句話說,爲了使用原始數據,您只需要原始數據;爲了驗證數據未被更改,您需要原始數據,簽名數據和公鑰。 (公鑰必須是與用於生成簽名數據的私鑰相匹配的公鑰)

要使驗證操作成功,驗證軟件需要輸入完全相同的輸入原來的簽名操作了。因此,無論您將原始數據還是簽名數據捆綁在一起,都需要注意不要添加或刪除數據的任何部分。

您可以將原始數據放入一個文件中,將簽名數據放在另一個文件中,然後製作zip存檔或任何其他類型的存檔。你可以Base64編碼並將它們放在一個帶分隔符的文本文件中。隨你。但數據的最終用戶需要原始數據,簽名數據和公鑰來驗證原始數據是否正確。