RSA加密解密
package utils; import javax.crypto.Cipher; import java.security.*; import java.security.interfaces.RSAPrivateKey; import java.security.interfaces.RSAPublicKey; import java.security.spec.PKCS8EncodedKeySpec; import java.security.spec.X509EncodedKeySpec; /** * RSA加密解密类 */ public class RSASecurityCode { // 非对称加密密钥算法 private static final String ALGORITHM="RSA"; // 密钥长度,用来初始化 private static final int KEY_SIZE=1024; // 公钥 private final byte[] publicKey; // 私钥 private final byte[] privateKey; /** * * 构造函数,在其中生成公钥和私钥 */ public RSASecurityCode() throws Exception{ // 得到密钥对生成器 KeyPairGenerator kpg=KeyPairGenerator.getInstance(ALGORITHM); kpg.initialize(KEY_SIZE); // 得到密钥对 KeyPair kp=kpg.generateKeyPair(); // 得到公钥 RSAPublicKey keyPublic=(RSAPublicKey)kp.getPublic(); publicKey=keyPublic.getEncoded(); // 得到私钥 RSAPrivateKey keyPrivate=(RSAPrivateKey)kp.getPrivate(); privateKey=keyPrivate.getEncoded(); } /** * * 用公钥对字符串进行加密 */ public byte[] getEncryptArray(String originalString, byte[] publicKeyArray) throws Exception{ // 得到公钥 X509EncodedKeySpec keySpec=new X509EncodedKeySpec(publicKeyArray); KeyFactory kf=KeyFactory.getInstance(ALGORITHM); PublicKey keyPublic=kf.generatePublic(keySpec); // 加密数据 Cipher cp=Cipher.getInstance(ALGORITHM); cp.init(Cipher.ENCRYPT_MODE, keyPublic); return cp.doFinal(originalString.getBytes()); } /** * * 使用私钥进行解密 */ public String getDecryptString(byte[] encryptedDataArray) throws Exception{ // 得到私钥 PKCS8EncodedKeySpec keySpec=new PKCS8EncodedKeySpec(privateKey); KeyFactory kf=KeyFactory.getInstance(ALGORITHM); PrivateKey keyPrivate=kf.generatePrivate(keySpec); // 解密数据 Cipher cp=Cipher.getInstance(ALGORITHM); cp.init(Cipher.DECRYPT_MODE, keyPrivate); byte[] arr=cp.doFinal(encryptedDataArray); // 得到解密后的字符串 return new String(arr); } public byte[] getPublicKey() { return publicKey; } public static void main(String[] arr) throws Exception{ String str="你好,世界! Hello,world!"; System.out.println("准备用公钥加密的字符串为:"+str); // 用公钥加密 RSASecurityCode rsaCoder=new RSASecurityCode(); byte[] publicKey=rsaCoder.getPublicKey(); byte[] encryptArray=rsaCoder.getEncryptArray(str, publicKey); System.out.print("用公钥加密后的结果为:"); for(byte b:encryptArray){ System.out.print(b); } System.out.println(); // 用私钥解密 String str1=rsaCoder.getDecryptString(encryptArray); System.out.println("用私钥解密后的字符串为:"+str1); } }