繁体   English   中英

RSA在java中签名和验证

[英]RSA Signing and verifying in java

我正在尝试在java中签署一条消息,它似乎不起作用。 验证步骤给了我错误。

谁能告诉我我的错误在哪里? 我无法理解我做错了什么。 谢谢

String messageString = "text";
try {
        KeyPairGenerator keyGen = KeyPairGenerator.getInstance("RSA", "BC");
        keyGen.initialize(512, new SecureRandom());
        KeyPair keyPair = keyGen.generateKeyPair();
        PublicKey RSAPublicKey = keyPair.getPublic();
        PrivateKey RSAPrivateKey = keyPair.getPrivate();

        System.out.println("public key = " + RSAPublicKey);
        System.out.println("private key = " + RSAPrivateKey);

        Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider());
        Signature signature = Signature.getInstance("SHA1withRSA", "BC");
        signature.initSign(RSAPrivateKey, new SecureRandom());
        byte[] message = messageString.getBytes();
        signature.update(message);
        byte[] sigBytes = signature.sign();

        Signature signature1 = Signature.getInstance("SHA1withRSA", "BC");
        signature1.initVerify(RSAPublicKey);
        signature1.update(sigBytes);

        boolean result = signature1.verify(sigBytes);
        System.out.println("result = "+result);
    } catch (NoSuchAlgorithmException | NoSuchProviderException | SignatureException | InvalidKeyException ex) {

    }    }

您在变量sigBytes有您的签名,并且您的消息在变量message 要验证消息,请先执行signature1.update(message) ,然后执行signature1.verify(sigBytes)

以下代码示例验证签名:

Signature signature1 = Signature.getInstance("SHA1withRSA", "BC");
signature1.initVerify(RSAPublicKey);
signature1.update(message);
boolean result = signature1.verify(sigBytes);

:)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM