以RSA的方式实现非对称加密

package com.sahadev;

import java.security.KeyFactory;
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.PrivateKey;
import java.security.PublicKey;
import java.security.interfaces.RSAPrivateKey;
import java.security.interfaces.RSAPublicKey;
import java.security.spec.PKCS8EncodedKeySpec;
import java.security.spec.X509EncodedKeySpec;

import javax.crypto.Cipher;

import org.apache.commons.codec.binary.Base64;

public class RSA {

	public static void main(String[] args) {
		JDKRSA();
	}

	public static void JDKRSA() {
		try {
			// 构建密钥对儿
			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 : " + org.apache.commons.codec.binary.Base64.encodeBase64String(rsaPublicKey.getEncoded()));
			System.out.println("Private Key : " + org.apache.commons.codec.binary.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(DH.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 = new X509EncodedKeySpec(rsaPublicKey.getEncoded());
			keyFactory = KeyFactory.getInstance("RSA");
			publicKey = keyFactory.generatePublic(x509EncodedKeySpec);
			cipher = Cipher.getInstance("RSA");
			cipher.init(Cipher.ENCRYPT_MODE, publicKey);
			result = cipher.doFinal(DH.src.getBytes());

			System.out.println("公钥加密,私钥解密------加密 : " + Base64.encodeBase64String(result));

			// 5.公钥加密,私钥解密---解密
			pkcs8EncodedKeySpec = new PKCS8EncodedKeySpec(rsaPrivateKey.getEncoded());
			keyFactory = KeyFactory.getInstance("RSA");
			privateKey = keyFactory.generatePrivate(pkcs8EncodedKeySpec);
			cipher = Cipher.getInstance("RSA");
			cipher.init(Cipher.DECRYPT_MODE, privateKey);
			result = cipher.doFinal(result);
			System.out.println("公钥加密,私钥解密------解密 : " + new String(result));
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}
附上输出结果:
Public Key : MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAJcFshoP5xm94r2aTbe++aMZMzJtXHxDpqmMQ9aL1cEthr2Xtac+Eckv32Kzb4R8C/6vObNBfd8sWx9FU5N2y6cCAwEAAQ==
Private Key : MIIBVAIBADANBgkqhkiG9w0BAQEFAASCAT4wggE6AgEAAkEAlwWyGg/nGb3ivZpNt775oxkzMm1cfEOmqYxD1ovVwS2GvZe1pz4RyS/fYrNvhHwL/q85s0F93yxbH0VTk3bLpwIDAQABAkBdAA7rabug6IRGykztyFcmjxAuD5aSl358jnoAFuCtMo4skfxh1vR4ENFUE0Lt0zJ3CKVH0o9UQDNG0r4jeOGRAiEA3KuXps9OG0AXuxLggg0e7B1Os5C3gNrH2fMqAPjtpY0CIQCvM4EPfdrjjNQiM0ATVBT5jZnw3PRu33pdyISWuoMHAwIgDOLMSUZjxj2Y5Si2CYIgoyMW/G9f99tOvlBvzHy8y+UCIF94MVu/uQdGNlJsmv3tU4CpKLmXrZq9LHDuU1HPUJcBAiEAy/0OS2Q9EBfmPwhsGXF4WMxj4wG0xzNFWxSeZB0qxzk=
私钥加密,公钥解密------加密 : NXF87irBEmK3x/fW7IWY4GuA8AP4Rvj4DJSp2Cjjsoo5X/ScHHKdvYtlM+9TOUAvMeuKWk5WH70g53q7+E73zg==
私钥加密,公钥解密------解密 : Hello,sahadev!
公钥加密,私钥解密------加密 : hjL8928jCbNtVCRhKaYAxQNJmiIAktBskhff2I01pbaHtfGH6GJTcP1i345/3I9OzwoVFxvi/oXgVJsIsg7MOQ==
公钥加密,私钥解密------解密 : Hello,sahadev!


上一篇:MD5,MD2,SHA加密的实现方式


下一篇:带你根据源码了解View的事件触发流程,主要讲解为什么子View返回true,ViewGroup就无法接收到事件的过程