【问题标题】:DSA data conversion in javaJava中的DSA数据转换
【发布时间】:2012-07-05 03:56:52
【问题描述】:

我想检查公钥是否与私钥对应 - 是否正确。

也没有称为 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");
        }
    }
}

【问题讨论】:

    标签: java encryption rsa dsa


    【解决方案1】:

    你不能使用DSA进行加密和解密,它是一种数字签名算法。数字签名是通过使用签名者的私钥加密消息的散列来创建的,以便可以使用他们的公钥对其进行验证。但是因为是散列的,所以消息无法恢复。

    编辑后:

    如果你有一个私钥和一个公钥,公钥可以从私钥派生出来,不需要使用密钥和验证任何东西。私钥包含构造KeyPair 的所有信息,然后getPublic() 方法将检索等效的公钥。如果您想查看给定的公钥是否正确,只需与此进行比较即可。

    【讨论】:

    • Person X - 有一个私钥 Perosn Y - 有一个公钥 M 是一条消息 如果我们不能编码,那它的目的是什么?
    • 是对消息进行签名,保证消息的完整性。这与机密性无关——如果您有机密信息,则需要加密算法。如果它是一个公共文档,但您希望人们确信 (a) 它来自您并且 (b) 没有被篡改,您将使用您的私钥生成的数字签名附加到它。用于不同目的的两种根本不同类型的算法。
    • 好的,那么如何将私钥附加到消息中,然后检查人员是否拥有正确的密钥?如何确认?
    • 不确定我是否理解这个问题?您在这里的密码学用例是什么 - 您要解决什么问题?是发送一条在传输过程中不得阅读的消息吗?如果有,有多少个收件人,发件人与收件人有什么关系?所有这些因素都会影响算法的选择。
    • 无法再次改装你,大卫。您当然可以使用私钥生成签名并使用公钥对其进行验证,但不能保证整个密钥对没有被替换,这也不能完成很多工作(除了创建/编码/解码似乎工作正常)。
    猜你喜欢
    • 2011-10-27
    • 1970-01-01
    • 2021-10-30
    • 2014-11-25
    • 1970-01-01
    • 2017-05-16
    • 1970-01-01
    • 2020-01-30
    • 2012-10-09
    相关资源
    最近更新 更多