RSA加密

/**
 *  参考资料 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);
	}*/

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值