4

単純な Xades/BES 実装と 2 つの状況があります。

  1. Java を使用する Windows 7 32 ビットの場合

    java version "1.7.0_25"
    Java(TM) SE Runtime Environment (build 1.7.0_25-b17)
    Java HotSpot(TM) Client VM (build 23.25-b01, mixed mode)
    
  2. Windows 2008 Server 64 ビットで、同じ JVM を使用。

私のアプリケーションは 32 ビットの Windows 7 で問題なく動作しますが、コンパイルしたコードを Windows 2008 Server で実行しようとすると、次のエラーが発生します。

    javax.crypto.BadPaddingException: Data must start with zero
    at sun.security.rsa.RSAPadding.unpadV15(Unknown Source)
    at sun.security.rsa.RSAPadding.unpad(Unknown Source)
    at com.sun.crypto.provider.RSACipher.doFinal(RSACipher.java:349)
    at com.sun.crypto.provider.RSACipher.engineDoFinal(RSACipher.java:382)
    at javax.crypto.Cipher.doFinal(Cipher.java:2087)

問題のあるコード フィールドは次のとおりです。

    public static byte[] getDecryptedSignatureValue(XMLSignature signature) throws         XadesElementException, InvalidKeyException
{
    byte[] signatureValue = null;
    try {
        KeyInfo keyInfo = signature.getKeyInfo();            
        PublicKey key = keyInfo.getPublicKey();            
        Cipher cipher = getCipher("RSA/ECB/PKCS1Padding");
        cipher.init(Cipher.DECRYPT_MODE, key);

        signatureValue = signature.getSignatureValue();
        byte[] cipherData = cipher.doFinal(signatureValue);
        return cipherData;

    } catch (KeyResolverException | XMLSignatureException | IllegalBlockSizeException | BadPaddingException ex) {
        Logger.getLogger(KeyUtils.class.getName()).log(Level.SEVERE, null, ex);
        Logger.getLogger(KeyUtils.class.getName()).log(Level.SEVERE, null, "SignatureValue:"+ BaseUtils.toBase64String(signatureValue));
    } finally {

    }
    return null;

}

私が思いつくことができる唯一のものは、アーキテクチャの違いです。ここで何か不足していますか?何が問題になる可能性がありますか?

前もって感謝します。

編集: これが私の新しい発見です。1. Windows 7 64 ビットでアプリケーションをテストしましたが、署名と検証中に問題はありませんでした。2. さらに興味深いことに、別の Windows 2008 Server 64 ビットでアプリケーションをテストしたところ、問題なく動作しました。

何かの構成設定があると思いますが、何がわかりませんでした。

4

1 に答える 1