RSA加密

来源:互联网 发布:淘宝买近视眼镜靠谱吗 编辑:程序博客网 时间:2024/06/05 23:34
/** *  参考资料 https://www.zhihu.com/question/25912483  http://blog.csdn.net/lemon_tree12138/article/details/50696926 */public class RSAUtil {public static final String src = "rsa test";//public static String publicKey = "MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBALA/5kGPIwmQQNXHzrdDLVGQhHhlqelZbW5DbzmT4yLfmhQjEINlonh+trz6LqVr+032AnXYaW2sKFja6tPvQtECAwEAAQ==";//public static String privateKey = "MIIBVAIBADANBgkqhkiG9w0BAQEFAASCAT4wggE6AgEAAkEAsD/mQY8jCZBA1cfOt0MtUZCEeGWp6VltbkNvOZPjIt+aFCMQg2WieH62vPoupWv7TfYCddhpbawoWNrq0+9C0QIDAQABAkAL9kpKaMyX+ZJs8AK3rXeF8akMAtplXAxxT2JdJgxkcWt5upAVJkf2S/Ijy8V+Tq4geP1N4FJxki+k9d6r4doBAiEA9xfoxBGBECR1mEuDwYasgjkXiQ3eh/CNkfaX7Fv8MGUCIQC2mkTIxyq5M5Saxk1fpd/ojgNvzWhdskNaHczqG9VD/QIgHW1WhktDYKXG731G0rx0PQoJmIPzVaM7aP/CNh76WNUCIQCDsTTEXKeaU/HrwfKRdc7LKIif/FM1p9fdSTq86H/hfQIgWFLfd4bceBwlsqYNrbnN/l5BQd+uZK+pPPfeoZ4Xf7o=";public static String publicKey ="MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAJSBwJz2g7bGNak+6CctrWjMtZ6c/F3yCnTQD8lWfJdl39CrwTwOzE6tEG7b4/8m7b9NrnHYSg8NMJarAqUnVLECAwEAAQ==";public static String privateKey ="MIIBVQIBADANBgkqhkiG9w0BAQEFAASCAT8wggE7AgEAAkEAlIHAnPaDtsY1qT7oJy2taMy1npz8XfIKdNAPyVZ8l2Xf0KvBPA7MTq0Qbtvj/ybtv02ucdhKDw0wlqsCpSdUsQIDAQABAkBPAQwoNNjzdlT72dSFaz5yn10LqbZ0gBxh8oJDeThFDgQolm2sRVXvz+v2epEOl/YzVBj0LpY8qMnWstY2Y1RBAiEA1AVlFzBCsotSWHHZqNb/LTD325G8gYgOgmj8eOWoVNkCIQCzT6qQ2xYa8bWT6UDSp9uWvNsXCOhNHGjMp26TyKI3mQIgMYKxAKE8cgUmzZCIi2zpWdw9hQCbTIRBHyL1EiZPEMECIQCYglDjZcQWZLD4vfJpeWWWfsilfej+9QPZ1SqCvanjOQIhANF3yQvi6kaXYWcbbiMie7jhoRwd5A5WnMF0bHc0hCbt";public static void main(String[] args) {//     jdkRSA();String s = publicKeyEncodeRSA("123456");System.out.println(s);String r = privateKeyDecodeRSA(s);System.out.println(r);}/** * 公钥加密 * @param str * @return */public static String publicKeyEncodeRSA(String str) {byte[] result = {};try {byte[] key = Base64.decodeBase64(publicKey);X509EncodedKeySpec x509EncodedKeySpec = new X509EncodedKeySpec(key);KeyFactory keyFactory = KeyFactory.getInstance("RSA");PublicKey publicKey = keyFactory.generatePublic(x509EncodedKeySpec);Cipher cipher = Cipher.getInstance("RSA");cipher.init(Cipher.ENCRYPT_MODE, publicKey);result = cipher.doFinal(str.getBytes());} catch (Exception e) {// TODO: handle exception//Logger.getLogger(RSAUtil.class).error("error", e);}return Base64.encodeBase64String(result);}/** * 私钥解密 * @param str * @return */public static String privateKeyDecodeRSA(String str) {byte[] result = {};try {byte[] key = Base64.decodeBase64(privateKey);byte[] rsaStr = Base64.decodeBase64(str);PKCS8EncodedKeySpec pkcs8EncodedKeySpec = new PKCS8EncodedKeySpec(key);KeyFactory keyFactory = KeyFactory.getInstance("RSA");PrivateKey privateKey = keyFactory.generatePrivate(pkcs8EncodedKeySpec);Cipher cipher = Cipher.getInstance("RSA");cipher.init(Cipher.DECRYPT_MODE, privateKey);result = cipher.doFinal(rsaStr);} catch (Exception e) {// TODO: handle exception//Logger.getLogger(RSAUtil.class).error("error", e);}return new String(result);}public static String getToken(String username, String password) {return Base64Util.getBase64Str(username + ":" + password, "encode");}/** * jdk实现:  */public static void jdkRSA() {try {// 1.初始化发送方密钥KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA");keyPairGenerator.initialize(512);KeyPair keyPair = keyPairGenerator.generateKeyPair();RSAPublicKey rsaPublicKey = (RSAPublicKey) keyPair.getPublic();RSAPrivateKey rsaPrivateKey = (RSAPrivateKey) keyPair.getPrivate();System.out.println("Public Key:" + Base64.encodeBase64String(rsaPublicKey.getEncoded()));System.out.println("Private Key:" + Base64.encodeBase64String(rsaPrivateKey.getEncoded()));// 2.私钥加密、公钥解密 ---- 加密PKCS8EncodedKeySpec pkcs8EncodedKeySpec = new PKCS8EncodedKeySpec(rsaPrivateKey.getEncoded());KeyFactory keyFactory = KeyFactory.getInstance("RSA");PrivateKey privateKey = keyFactory.generatePrivate(pkcs8EncodedKeySpec);Cipher cipher = Cipher.getInstance("RSA");cipher.init(Cipher.ENCRYPT_MODE, privateKey);byte[] result = cipher.doFinal(src.getBytes());System.out.println("私钥加密、公钥解密 ---- 加密:" + Base64.encodeBase64String(result));// 3.私钥加密、公钥解密 ---- 解密X509EncodedKeySpec x509EncodedKeySpec = new X509EncodedKeySpec(rsaPublicKey.getEncoded());keyFactory = KeyFactory.getInstance("RSA");PublicKey publicKey = keyFactory.generatePublic(x509EncodedKeySpec);cipher = Cipher.getInstance("RSA");cipher.init(Cipher.DECRYPT_MODE, publicKey);result = cipher.doFinal(result);System.out.println("私钥加密、公钥解密 ---- 解密:" + new String(result));// 4.公钥加密、私钥解密 ---- 加密X509EncodedKeySpec x509EncodedKeySpec2 = new X509EncodedKeySpec(rsaPublicKey.getEncoded());KeyFactory keyFactory2 = KeyFactory.getInstance("RSA");PublicKey publicKey2 = keyFactory2.generatePublic(x509EncodedKeySpec2);Cipher cipher2 = Cipher.getInstance("RSA");cipher2.init(Cipher.ENCRYPT_MODE, publicKey2);byte[] result2 = cipher2.doFinal(src.getBytes());System.out.println("公钥加密、私钥解密 ---- 加密:" + Base64.encodeBase64String(result2));// 5.私钥解密、公钥加密 ---- 解密PKCS8EncodedKeySpec pkcs8EncodedKeySpec5 = new PKCS8EncodedKeySpec(rsaPrivateKey.getEncoded());KeyFactory keyFactory5 = KeyFactory.getInstance("RSA");PrivateKey privateKey5 = keyFactory5.generatePrivate(pkcs8EncodedKeySpec5);Cipher cipher5 = Cipher.getInstance("RSA");cipher5.init(Cipher.DECRYPT_MODE, privateKey5);byte[] result5 = cipher5.doFinal(result2);System.out.println("公钥加密、私钥解密 ---- 解密:" + new String(result5));} catch (Exception e) {e.printStackTrace();}}/*public static String getEncPwd(String in) {String ot = "";if (!"".equals(in) && in != null) {ot = Base64Util.getBase64Str(getRc4Str(in, Contants.PWDKEY), "encode");}return ot;}public static String getDecPwd(String in) {String ot = "";if (!"".equals(in) && in != null) {ot = getRc4Str(Base64Util.getBase64Str(in, "decode"), Contants.PWDKEY);}return ot;}*//*public static String getRc4Str(String aInput, String aKey) {int[] iS = new int[256];byte[] iK = new byte[256];for (int i = 0; i < 256; i++) {iS[i] = i;}int j = 1;for (short i = 0; i < 256; i++) {iK[i] = (byte) aKey.charAt((i % aKey.length()));}j = 0;for (int i = 0; i < 255; i++) {j = (j + iS[i] + iK[i]) % 256;int temp = iS[i];iS[i] = iS[j];iS[j] = temp;}int i = 0;j = 0;char[] iInputChar = aInput.toCharArray();char[] iOutputChar = new char[iInputChar.length];for (short x = 0; x < iInputChar.length; x++) {i = (i + 1) % 256;j = (j + iS[i]) % 256;int temp = iS[i];iS[i] = iS[j];iS[j] = temp;int t = (iS[i] + (iS[j] % 256)) % 256;int iY = iS[t];char iCY = (char) iY;iOutputChar[x] = (char) (iInputChar[x] ^ iCY);}return new String(iOutputChar);}*/}