-1

公開鍵が秘密鍵に対応しているかどうかを確認したいのですが、正しいですか。

BCというプロバイダーもありません。私はこの実装を持っていますが、Utils.createFixedRandom() が何をすべきかわかりません。私はそのようなライブラリとメソッドを持っていません。

さらに、java.security を使用しない未加工の実装がある場合、それは素晴らしいことです。

import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.SecureRandom;
import java.security.Signature;

public class BasicDSAExample {
    public static void main(String[] args) throws Exception {
        KeyPairGenerator keyGen = KeyPairGenerator.getInstance("DSA", "BC");
        keyGen.initialize(512, new SecureRandom());
        KeyPair keyPair = keyGen.generateKeyPair();
        Signature signature = Signature.getInstance("DSA", "BC");

        signature.initSign(keyPair.getPrivate(), Utils.createFixedRandom() );
        byte[] message = new byte[] { (byte) 'a', (byte) 'b', (byte) 'c' };
        signature.update(message);
        byte[] sigBytes = signature.sign();

        signature.initVerify(keyPair.getPublic());
        signature.update(message);
        if (signature.verify(sigBytes)) {
            System.out.println("pow");
        } else {
            System.out.println("nie");
        }
    }
}
4

1 に答える 1

1

DSAを使用して暗号化および復号化することはできません。これはデジタル署名アルゴリズムです。デジタル署名は、署名者の秘密鍵を使用してメッセージのハッシュを暗号化することによって作成されるため、署名者の公開鍵を使用して検証できます。ただし、ハッシュされているため、メッセージを復元することはできません。

あなたの編集に続いて:

秘密鍵と公開鍵がある場合、公開鍵は秘密鍵から導出できます。鍵を使用して何かを検証する必要はありません。秘密鍵には を構築するためのすべての情報が含まれておりKeyPairgetPublic()メソッドは同等の公開鍵を取得します。特定の公開鍵が正しいかどうかを確認したい場合は、これと比較してください。

于 2012-07-04T16:19:02.507 に答える