1

メッセージに署名したいのですが、署名から元のメッセージを取得します。Java で RSA および DSA 署名を見つけました: http://docs.oracle.com/javase/tutorial/security/apisign/vstep4.html
ですが、その検証方法は検証に元のデータを使用し、署名からメッセージを復元できません。
JavaまたはJava用のフリーライブラリでそれを行う方法はありますか?
皆さんありがとう。

4

2 に答える 2

0

バウンシーキャッスルが使えます。ISO-9796-2 をサポートしています。ISO9796Test.javaはを提供します。ここに役立つかもしれない抜粋があります:

RSAKeyParameters pubParameters = new RSAKeyParameters(false, mod3, pub3);
RSAKeyParameters privParameters = new RSAKeyParameters(true, mod3, pri3);
RSAEngine rsa = new RSAEngine();
byte[] data;
ISO9796d2Signer eng = new ISO9796d2Signer(rsa, new RIPEMD128Digest());
eng.init(true, privParameters);
eng.update(msg4[0]);
eng.update(msg4, 1, msg4.length - 1);
data = eng.generateSignature();
eng.init(false, pubParameters);
eng.update(msg4[0]);
eng.update(msg4, 1, msg4.length - 1);
if (eng.hasFullMessage()) {
    eng = new ISO9796d2Signer(rsa, new RIPEMD128Digest());
    eng.init(false, pubParameters);
    if (!eng.verifySignature(sig4)) {
        // signature tampered with
    }
    byte[] message = eng.getRecoveredMessage(), 0, msg4);
}
于 2012-06-03T14:38:43.113 に答える
0

元のメッセージを必要としない ISO9796-2 デジタル署名スキーム 1、トレーラ フィールド 1、オクテット「BC」について言及していると思います。

    RSAEngine rsa = new RSAEngine();
    //DS as SHA1
    Digest dig = new SHA1Digest();
    //3rd parameter "true" indicates implicit which means TF1(octet BC)
    ISO9796d2Signer eng = new ISO9796d2Signer(rsa, dig, true);
    eng.init(false, pubKeyParameter);

    eng.verifySignature(sig);  // if the signature is valid
    eng.getRecoveredMessage(); // get the recovered message, only after successful signature verification
于 2012-06-13T02:23:43.023 に答える