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