我需要有人帮助我理解 XML 数字签名方法rsa-sha1。我想签名值 = RSA-encrypt(sha1(signedInfo), privatekey)。
注意 Base64.encode(sha1(signedInfo)) 包含 28 个字符。所以我认为 Base64.encode(RSA-decrypt(signaturevalue), publickey) 也应该返回 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"/>