从 XML 签名值中获取 sha1 哈希值
Get the sha1-hashed value from XML signature value
我需要有人帮我理解XML数字签名方法rsa-sha1。我假设签名值 = RSA-encrypt(sha1(signedInfo), privatekey)。
注意 Base64.encode(sha1(signedInfo)) 包含 28 个字符。所以我认为 Base64.encode(RSA-decrypt(signaturevalue), publickey) 也应该 return 28 个字符。然而,我居然得到了一个48个字符的字符串。
Base64 base64 = new Base64();
byte[] encrypted = base64.decode(signatureValue);
try {
Cipher cipher = Cipher.getInstance("RSA");
cipher.init(Cipher.DECRYPT_MODE, getX509Cert().getPublicKey());
byte[] cipherText = cipher.doFinal(encrypted);
System.out.println(base64.encodeToString(cipherText));
//print out MCEwCQYFKw4DAhoFAAQU0G+7jFPydS/sWGO1QPjB0v3XTz4=
//which contains 48 characters.
}
catch (Exception ex){
ex.printStackTrace();
}
签名方法如XML文件中所示
<ds:SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1"/>
RSA 签名实际上与使用私钥加密不同,但 JCE 通过允许 Cipher
中的 'backwards' 操作来促进此错误(仅)RSA 实际上执行 PKCS1-v1_5 签名和恢复,而不是设计的加密和解密。
对于 PKCS1 到 v1.5 中的原始标准化 RSA 签名方案,现在改名为 RSASSA-PKCS1-v1_5,填充的值(具有 'type' 01 多个 FF 和一个 00)和 modexp 'ed 用私钥 不仅仅是散列,而是包含散列 的 ASN.1 结构。请参阅 section 9.2 of rfc8017 中的编码操作 EMSA-PKCS1-v1_5 或 rfc2437 中的 rfc3447 或 9.2.1,尤其是步骤 2 和(对于较新的两个版本)'Notes' 项目 1.
骗人Using SHA1 and RSA with java.security.Signature vs. MessageDigest and Cipher
和
我需要有人帮我理解XML数字签名方法rsa-sha1。我假设签名值 = RSA-encrypt(sha1(signedInfo), privatekey)。
注意 Base64.encode(sha1(signedInfo)) 包含 28 个字符。所以我认为 Base64.encode(RSA-decrypt(signaturevalue), publickey) 也应该 return 28 个字符。然而,我居然得到了一个48个字符的字符串。
Base64 base64 = new Base64();
byte[] encrypted = base64.decode(signatureValue);
try {
Cipher cipher = Cipher.getInstance("RSA");
cipher.init(Cipher.DECRYPT_MODE, getX509Cert().getPublicKey());
byte[] cipherText = cipher.doFinal(encrypted);
System.out.println(base64.encodeToString(cipherText));
//print out MCEwCQYFKw4DAhoFAAQU0G+7jFPydS/sWGO1QPjB0v3XTz4=
//which contains 48 characters.
}
catch (Exception ex){
ex.printStackTrace();
}
签名方法如XML文件中所示
<ds:SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1"/>
RSA 签名实际上与使用私钥加密不同,但 JCE 通过允许 Cipher
中的 'backwards' 操作来促进此错误(仅)RSA 实际上执行 PKCS1-v1_5 签名和恢复,而不是设计的加密和解密。
对于 PKCS1 到 v1.5 中的原始标准化 RSA 签名方案,现在改名为 RSASSA-PKCS1-v1_5,填充的值(具有 'type' 01 多个 FF 和一个 00)和 modexp 'ed 用私钥 不仅仅是散列,而是包含散列 的 ASN.1 结构。请参阅 section 9.2 of rfc8017 中的编码操作 EMSA-PKCS1-v1_5 或 rfc2437 中的 rfc3447 或 9.2.1,尤其是步骤 2 和(对于较新的两个版本)'Notes' 项目 1.
骗人Using SHA1 and RSA with java.security.Signature vs. MessageDigest and Cipher
和