Java如何生成publickey
生成 RSA 公钥
在 Java 中生成 RSA 公钥通常需要使用 KeyPairGenerator 类。以下是一个完整的示例代码:

import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.NoSuchAlgorithmException;
import java.security.PublicKey;
public class PublicKeyGenerator {
public static PublicKey generateRsaPublicKey() throws NoSuchAlgorithmException {
KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA");
keyPairGenerator.initialize(2048); // 密钥长度
KeyPair keyPair = keyPairGenerator.generateKeyPair();
return keyPair.getPublic();
}
}
从字符串加载公钥
如果需要从 Base64 编码的字符串加载公钥:

import java.security.KeyFactory;
import java.security.PublicKey;
import java.security.spec.X509EncodedKeySpec;
import java.util.Base64;
public class PublicKeyLoader {
public static PublicKey loadPublicKey(String base64PublicKey) throws Exception {
byte[] publicBytes = Base64.getDecoder().decode(base64PublicKey);
X509EncodedKeySpec keySpec = new X509EncodedKeySpec(publicBytes);
KeyFactory keyFactory = KeyFactory.getInstance("RSA");
return keyFactory.generatePublic(keySpec);
}
}
将公钥转换为字符串
将公钥对象转换为 Base64 编码字符串:
import java.security.PublicKey;
import java.util.Base64;
public class PublicKeyConverter {
public static String publicKeyToString(PublicKey publicKey) {
return Base64.getEncoder().encodeToString(publicKey.getEncoded());
}
}
使用 Bouncy Castle 库
如果需要更灵活的密钥生成,可以使用 Bouncy Castle 库:
import org.bouncycastle.jce.provider.BouncyCastleProvider;
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.Security;
import java.security.PublicKey;
public class BouncyCastleKeyGenerator {
public static PublicKey generateEcPublicKey() throws Exception {
Security.addProvider(new BouncyCastleProvider());
KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("EC", "BC");
keyPairGenerator.initialize(256);
KeyPair keyPair = keyPairGenerator.generateKeyPair();
return keyPair.getPublic();
}
}
注意事项
密钥长度应根据安全要求选择,RSA 通常建议至少 2048 位 生成的密钥可以持久化存储,但需要确保安全 Bouncy Castle 需要额外添加依赖到项目中 处理密钥时应考虑异常情况,如 NoSuchAlgorithmException




