/**
* 测试方法
* @param args
* @throws Exception
*/
public static void main(String[] args) throws Exception {
/**
* 1,先生成公钥和私钥
* 2,再测试加密解密
*/
String password = "duxiaowen123456";
String algorithm = "RSA";
String encdePassword = encodePassword(password, algorithm);
System.out.println("加密后的密文:"+encdePassword);
String decodePassword = decodePassword(encdePassword,algorithm);
System.out.println("加密后的密码:"+decodePassword);
}
/**
* 生成公钥和私钥
* @param algorithm
* @throws NoSuchAlgorithmException
*/
private static void generateKey(String algorithm) throws NoSuchAlgorithmException {
KeyPairGenerator instance = KeyPairGenerator.getInstance(algorithm);
KeyPair keyPair = instance.generateKeyPair();
String priKey = Base64.encode(keyPair.getPrivate().getEncoded());
String pubKey = Base64.encode(keyPair.getPublic().getEncoded());
}
/**
* 获取公钥对象
* @param algorithm
* @param pubKey
* @return
* @throws Base64DecodingException
* @throws NoSuchAlgorithmException
* @throws InvalidKeySpecException
*/
private static Key getPublicKey(String algorithm, String pubKey) throws Base64DecodingException, NoSuchAlgorithmException, InvalidKeySpecException {
X509EncodedKeySpec x509EncodedKeySpec = new X509EncodedKeySpec(Base64.decode(pubKey));
KeyFactory kf = KeyFactory.getInstance(algorithm);
return kf.generatePublic(x509EncodedKeySpec);
}
/**
* 获取私钥对象
* @param algorithm 加密规则
* @param priKey 私钥字符串
* @return
* @throws Base64DecodingException
* @throws NoSuchAlgorithmException
* @throws InvalidKeySpecException
*/
private static PrivateKey getPrivateKey(String algorithm, String priKey) throws Base64DecodingException, NoSuchAlgorithmException, InvalidKeySpecException {
PKCS8EncodedKeySpec pkcs8EncodedKeySpec = new PKCS8EncodedKeySpec(Base64.decode(priKey));
KeyFactory kf = KeyFactory.getInstance(algorithm);
return kf.generatePrivate(pkcs8EncodedKeySpec);
}
/**
* 加密
* @param password
* @param algorithm
* @return
* @throws NoSuchAlgorithmException
* @throws NoSuchPaddingException
* @throws Base64DecodingException
* @throws InvalidKeySpecException
* @throws InvalidKeyException
* @throws IllegalBlockSizeException
* @throws BadPaddingException
*/
public static String encodePassword(String password, String algorithm) throws NoSuchAlgorithmException, NoSuchPaddingException, Base64DecodingException, InvalidKeySpecException, InvalidKeyException, IllegalBlockSizeException, BadPaddingException {
Cipher cipher = Cipher.getInstance(algorithm);
String pubKey = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCJ6tjX6FEUVViNAnEgi6jNc3b1uen7lH0IGHCR" +
"9J1o0iAq5i3oVkDlZaPWBcDiaHSRm/A0MoOTZEDbY/Bu+hCh38Yhq27Kk1/BvXsZeZr2QDALhrrJ" +
"4uLvfccrHDZMT1BMZ4dvXwuIY97uznVvMCEYOL6DK0F7cd0EB+dB4ziDJwIDAQAB";
cipher.init(Cipher.ENCRYPT_MODE,getPublicKey(algorithm,pubKey));
byte[] bytes = cipher.doFinal(password.getBytes());
return Base64.encode(bytes);
}
/**
* 解密
* @param encodePassword
* @param algorithm
* @return
*/
public static String decodePassword(String encodePassword, String algorithm) throws NoSuchPaddingException, NoSuchAlgorithmException, InvalidKeyException, Base64DecodingException, BadPaddingException, IllegalBlockSizeException, InvalidKeySpecException {
Cipher cipher = Cipher.getInstance(algorithm);
String priKey = "MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBAInq2NfoURRVWI0CcSCLqM1zdvW5" +
"6fuUfQgYcJH0nWjSICrmLehWQOVlo9YFwOJodJGb8DQyg5NkQNtj8G76EKHfxiGrbsqTX8G9exl5" +
"mvZAMAuGusni4u99xyscNkxPUExnh29fC4hj3u7OdW8wIRg4voMrQXtx3QQH50HjOIMnAgMBAAEC" +
"gYBgfE0R13SJrh+SHug35ZzFhwbtaBBasgo61KZEZgaNo5tfh8MMLPOfyNiyzTmg64TJrXeBfOlx" +
"/wwksCkv6oAhSCumD+opBwLYqq+XWl7wjAS2GWQo/6Zl7GcwJuIpzOABRj0FqfqSrOZgY9+rwky2" +
"qJCrcmBDhInG/09IYWomsQJBAMAP3hBjofzSzGaE4/5AB8vAvcBMsceqbf44agnXPUktG/8ceD7a" +
"UjJsvvAvig5ISVabmVPnBoZYbE2yM7eZ5c8CQQC31JqQ8+/Y3fo3fGGdSlUAoW6mhMW44CHCIS9m" +
"+LEUoih46PP4ljm93FtDHfr2y42TnmS8HOM2f2tZTw9FpDspAkEAn7zSuZjUAj2kiOOf6DeDBGCi" +
"sMxY1DKYVua+sr6Ul0bwUQZxr/zOfmfZilRPoz9V17WEGbc8wwHJ2fkLcHmMGwJACA/Av36TFBWX" +
"9Xr05Orvk1mA+rhz20mo8VR3ObLKQTdjQvokSNB9s7/IGMdlzBDdIo4dqMozhJ5N3NrEtq8fEQJA" +
"QFgtEuY6rZ23SBHLXNLqVMIGjw21Xr//QK17m1HUpdOcJvvOmtMFTDXg4tjZhUpgncnKgEYgKAr1" +
"VD2XREwV+A==";
PrivateKey privateKey = getPrivateKey(algorithm, priKey);
cipher.init(Cipher.DECRYPT_MODE,privateKey);
byte[] bytes = cipher.doFinal(Base64.decode(encodePassword));
return new String(bytes);
}
RSA加密解密工具类
最新推荐文章于 2024-04-19 10:00:00 发布