Мне нужен кто-нибудь, чтобы помочь мне понять метод цифровой подписи 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"/>