下面的代码段向您展示了如何使用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();
}
}
}