我想發送兩個人之間的original_message。讓說,Alice和Bob,並且 我想知道如果這些步驟是正確的簽名的驗證或不java安全中的簽名驗證過程
- 翹散與她的專用密鑰的original_message - > H(M)
- 愛麗絲密碼散列消息 - > C(H(M))
- 愛麗絲簽名消息與她的專用密鑰 - > S(C(H(M)))
愛麗絲髮送的最後簽署的消息與她的(公鑰)和(original_message)給Bob。 在鮑勃側:
- 鮑勃哈希original_message - > H(M)
- 鮑勃破譯與Alice的公共密鑰簽名的消息 - > d(S(C(H(M))))
- 鮑勃檢查帶有散列消息的解密消息是否相等? (h(m)== d(s(c(h(m)))))
我知道我犯了一些錯誤。有沒有人知道雙方的良好秩序是什麼?
這裏我使用了java.security來做到這一點,但是當我在最後一步檢查哈希值時,它給了我錯誤!
在愛麗絲部分:
public byte[] Sign(byte[] aMessage) {
try {
// get an instance of a cipher with RSA with ENCRYPT_MODE
// Init the signature with the private key
// Compute signature
Cipher cipher = Cipher.getInstance("RSA");
cipher.init(Cipher.ENCRYPT_MODE, thePrivateKey);
Signature instance = Signature.getInstance("MD5withRSA");
instance.initSign(thePrivateKey);
// get an instance of the java.security.MessageDigest with MD5
// process the digest
MessageDigest md5_digest = MessageDigest.getInstance("MD5");
md5_digest.update(aMessage);
byte[] digest = md5_digest.digest();
// return the encrypted digest
byte[] cipherText = cipher.doFinal(digest);
instance.update(cipherText);
byte[] signedMSG = instance.sign();
return signedMSG;
} catch (Exception e) {
System.out.println("Signature error");
e.printStackTrace();
return null;
}
}
在鮑勃部分
:
public boolean CheckSignature(byte[] aMessage, byte[] aSignature,
PublicKey aPK) {
try {
// get an instance of a cipher with RSA with ENCRYPT_MODE
// Init the signature with the private key
// decrypt the signature
Cipher cipher = Cipher.getInstance("RSA");
cipher.init(Cipher.DECRYPT_MODE, aPK);
byte[] decrypted_digest = cipher.doFinal(aSignature);
// get an instance of the java.security.MessageDigest with MD5
MessageDigest md5_digest = MessageDigest.getInstance("MD5");
// process the digest
md5_digest.update(aMessage);
byte[] digest = md5_digest.digest();
// check if digest1 == digest2
if (decrypted_digest == digest) {
return true;
}else {
return false;
}
} catch (Exception e) {
System.out.println("Verify signature error");
e.printStackTrace();
return false;
}
}
在鮑勃部分,是應該說'使用私鑰初始化簽名'的評論?當然這應該是公共密鑰 –