实现Java私钥公钥的步骤

在Java中实现私钥公钥的使用通常涉及以下几个步骤:

步骤 描述
1 生成密钥对
2 保存私钥和公钥
3 使用私钥进行加密
4 使用公钥进行解密

下面我们一步一步来实现这个过程。

步骤1:生成密钥对

在Java中,可以使用KeyPairGenerator类来生成密钥对。具体代码如下:

import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.NoSuchAlgorithmException;

public class KeyPairGeneratorExample {
    public static void main(String[] args) {
        try {
            // 使用RSA算法生成密钥对
            KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA");
            // 设置密钥长度
            keyPairGenerator.initialize(2048);
            // 生成密钥对
            KeyPair keyPair = keyPairGenerator.genKeyPair();
            
            // 获取私钥和公钥
            PrivateKey privateKey = keyPair.getPrivate();
            PublicKey publicKey = keyPair.getPublic();
            
            // TODO: 保存私钥和公钥,用于后续的加密和解密操作
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        }
    }
}

在上述代码中,我们使用RSA算法生成了一个2048位的密钥对,并获取了私钥和公钥。

步骤2:保存私钥和公钥

生成密钥对后,我们需要将私钥和公钥保存起来,以便后续的加密和解密操作。一种常见的做法是将私钥和公钥分别保存到文件中,可以使用KeyStore类来实现。具体代码如下:

import java.io.FileOutputStream;
import java.io.IOException;
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.KeyStore;
import java.security.NoSuchAlgorithmException;
import java.security.PrivateKey;
import java.security.PublicKey;

public class KeyPairGeneratorExample {
    public static void main(String[] args) {
        try {
            // 使用RSA算法生成密钥对
            KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA");
            // 设置密钥长度
            keyPairGenerator.initialize(2048);
            // 生成密钥对
            KeyPair keyPair = keyPairGenerator.genKeyPair();
            
            // 获取私钥和公钥
            PrivateKey privateKey = keyPair.getPrivate();
            PublicKey publicKey = keyPair.getPublic();
            
            // 保存私钥和公钥
            savePrivateKey(privateKey, "private.key");
            savePublicKey(publicKey, "public.key");
        } catch (NoSuchAlgorithmException | IOException e) {
            e.printStackTrace();
        }
    }
    
    private static void savePrivateKey(PrivateKey privateKey, String fileName) throws IOException {
        KeyStore keyStore = KeyStore.getInstance("PKCS12");
        keyStore.load(null, null);
        keyStore.setKeyEntry("private", privateKey, null, null);
        keyStore.store(new FileOutputStream(fileName), null);
    }
    
    private static void savePublicKey(PublicKey publicKey, String fileName) throws IOException {
        KeyStore keyStore = KeyStore.getInstance("PKCS12");
        keyStore.load(null, null);
        keyStore.setCertificateEntry("public", new Certificate(publicKey));
        keyStore.store(new FileOutputStream(fileName), null);
    }
}

上述代码中,我们使用KeyStore类来保存私钥和公钥。私钥保存为PKCS12格式的文件(.key),公钥保存为证书(.key)。

步骤3:使用私钥进行加密

在Java中,可以使用Cipher类来进行加密操作。具体代码如下:

import javax.crypto.Cipher;
import java.nio.charset.StandardCharsets;
import java.security.KeyFactory;
import java.security.PrivateKey;
import java.security.spec.PKCS8EncodedKeySpec;

public class EncryptionExample {
    public static void main(String[] args) {
        try {
            // 读取私钥文件
            byte[] privateKeyBytes = Files.readAllBytes(Paths.get("private.key"));
            
            // 构造PKCS8EncodedKeySpec对象
            PKCS8EncodedKeySpec privateKeySpec = new PKCS8EncodedKeySpec(privateKeyBytes);
            
            // 获取私钥
            KeyFactory keyFactory = KeyFactory.getInstance("RSA");
            PrivateKey privateKey = keyFactory.generatePrivate(privateKeySpec);
            
            // 创建Cipher对象,并设置为加密模式
            Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");
            cipher.init(Cipher.EN