Java 证书加密解密:安全数据保护指南
Java 使用证书进行加解密需要以下步骤:
-
生成密钥对:使用 Java Keytool 工具生成公钥和私钥,存储在 Java 密钥库中。
-
签名证书:使用私钥签名证书,生成数字证书。
-
加密数据:使用公钥加密数据,保证数据的安全性。
-
解密数据:使用私钥解密数据,获取原始数据。
下面是示例代码:
- 生成密钥对
// 生成密钥对
KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance('RSA');
keyPairGenerator.initialize(2048);
KeyPair keyPair = keyPairGenerator.generateKeyPair();
// 存储密钥对到 Java 密钥库
KeyStore keyStore = KeyStore.getInstance('JKS');
keyStore.load(null, null);
keyStore.setKeyEntry('mykey', keyPair.getPrivate(), 'password'.toCharArray(), new Certificate[] {certificate});
FileOutputStream fos = new FileOutputStream('mykeystore.jks');
keyStore.store(fos, 'password'.toCharArray());
fos.close();
- 签名证书
// 生成证书请求
CertificationRequestInfo certReqInfo = new CertificationRequestInfo(subjectName, publicKey, new DERSet(), null);
PKCS10CertificationRequest csr = new PKCS10CertificationRequest(certReqInfo, privateKey);
// 生成数字证书
X509V3CertificateGenerator certGen = new X509V3CertificateGenerator();
certGen.setIssuerDN(new X500Principal('CN=Test CA Certificate'));
certGen.setSubjectDN(new X500Principal(subjectName));
certGen.setPublicKey(publicKey);
certGen.setNotBefore(new Date(System.currentTimeMillis() - 24 * 60 * 60 * 1000));
certGen.setNotAfter(new Date(System.currentTimeMillis() + 2 * 365 * 24 * 60 * 60 * 1000));
certGen.setSignatureAlgorithm('SHA256withRSA');
X509Certificate certificate = certGen.generateX509Certificate(privateKey);
- 加密数据
// 加载公钥
KeyStore keyStore = KeyStore.getInstance('JKS');
keyStore.load(new FileInputStream('mykeystore.jks'), 'password'.toCharArray());
PublicKey publicKey = keyStore.getCertificate('mykey').getPublicKey();
// 使用公钥加密数据
Cipher cipher = Cipher.getInstance('RSA');
cipher.init(Cipher.ENCRYPT_MODE, publicKey);
byte[] encryptedData = cipher.doFinal(data);
- 解密数据
// 加载私钥
KeyStore keyStore = KeyStore.getInstance('JKS');
keyStore.load(new FileInputStream('mykeystore.jks'), 'password'.toCharArray());
PrivateKey privateKey = (PrivateKey) keyStore.getKey('mykey', 'password'.toCharArray());
// 使用私钥解密数据
Cipher cipher = Cipher.getInstance('RSA');
cipher.init(Cipher.DECRYPT_MODE, privateKey);
byte[] decryptedData = cipher.doFinal(encryptedData);
原文地址: https://www.cveoy.top/t/topic/lNu5 著作权归作者所有。请勿转载和采集!