Java如何生成公钥和私钥?

下面的代码段向您展示了如何使用JDK Security API生成公共和私有密钥。私钥可用于对文档签名,而公钥可用于验证文档签名有效。

java.security软件包中提供了用于生成密钥对的API 。这意味着我们必须将此包导入到我们的代码中。生成密钥对的类是KeyPairGenerator。要获得此类的实例,我们必须getInstance()通过提供两个参数来调用方法。第一个参数是算法,第二个参数是提供者。

获取密钥生成器的实例后,我们必须对其进行初始化。该initialize()方法采用两个参数,密钥大小和随机性来源。我们将密钥大小设置为,1024并传递和的实例SecureRandom。

最后,为了生成密钥对,我们调用类的generateKeyPair()方法KeyPairGenerator。这将通过调用and方法KeyPair从可以获取PrivateKeyandPublicKey的位置返回一个对象。getPrivate()getPublic()

让我们看看下面的代码片段:

package org.nhooo.example.security;

import java.security.*;
import java.util.Base64;

public class GenerateKeyPairDemo {
    public static void main(String[] args) {
        try {
            KeyPairGenerator keyGen = KeyPairGenerator.getInstance("DSA", "SUN");

            // 初始化KeyPairGenerator。
            SecureRandom random = SecureRandom.getInstance("SHA1PRNG", "SUN");
            keyGen.initialize(1024, random);

            // 生成密钥对,私钥和公钥。
            KeyPair keyPair = keyGen.generateKeyPair();
            PrivateKey privateKey = keyPair.getPrivate();
            PublicKey publicKey = keyPair.getPublic();

            Base64.Encoder encoder = Base64.getEncoder();
            System.out.println("privateKey: " + encoder.encodeToString(privateKey.getEncoded()));
            System.out.println("publicKey: " + encoder.encodeToString(publicKey.getEncoded()));
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        } catch (NoSuchProviderException e) {
            e.printStackTrace();
        }
    }
}