Java 非对称加密RSA应用实现
warning:
这篇文章距离上次修改已过304天,其中的内容可能已经有所变动。
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.SecureRandom;
import java.util.Base64;
import javax.crypto.Cipher;
public class RSACipher {
public static void main(String[] args) throws Exception {
// 生成密钥对
KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA");
keyPairGenerator.initialize(2048, new SecureRandom());
KeyPair keyPair = keyPairGenerator.generateKeyPair();
// 公钥和私钥
byte[] publicKey = keyPair.getPublic().getEncoded();
byte[] privateKey = keyPair.getPrivate().getEncoded();
// 编码为Base64
String publicKeyEncoded = Base64.getEncoder().encodeToString(publicKey);
String privateKeyEncoded = Base64.getEncoder().encodeToString(privateKey);
System.out.println("公钥:\n" + publicKeyEncoded);
System.out.println("私钥:\n" + privateKeyEncoded);
// 加密和解密
String data = "Hello, World!";
String encryptedData = encrypt(publicKeyEncoded, data);
String decryptedData = decrypt(privateKeyEncoded, encryptedData);
System.out.println("加密数据:\n" + encryptedData);
System.out.println("解密数据:\n" + decryptedData);
}
private static String encrypt(String publicKeyEncoded, String data) throws Exception {
Cipher cipher = Cipher.getInstance("RSA");
cipher.init(Cipher.ENCRYPT_MODE, getPublicKey(publicKeyEncoded));
byte[] encryptedData = cipher.doFinal(data.getBytes());
return Base64.getEncoder().encodeToString(encryptedData);
}
private static String decrypt(String privateKeyEncoded, String encryptedData) throws Exception {
Cipher cipher = Cipher.getInstance("RSA");
cipher.init(Cipher.DECRYPT_MODE, getPrivateKey(privateKeyEncoded));
byte[] decryptedData = cipher.doFinal(Base64.getDecoder().decode(encryptedData));
return new String(decryptedData);
}
private static java.security.PublicKey getPublicKey(String publicKeyEncoded) throws Exception {
byte[] publicKeyDecoded = Base64.getDecoder().decode(publicKeyEncoded);
X509EncodedKeySpec keySpec = new X509EncodedKeySpec(publicKeyDecoded);
KeyFactory keyFactory = KeyFactory.getInstance("RSA");
return keyFactory.generatePublic(keySpec);
}
private static java.security.PrivateKey g
评论已关闭