RSA暗号化アルゴリズム(公開鍵のみ暗号化、秘密鍵のみ復号)


目次
1.RSAの紹介
2.RSAコード
 
1.RSAの紹介
RSA暗号化アルゴリズムは非対称暗号化アルゴリズムである.公開鍵暗号化や電子商取引ではRSAが広く用いられている.RSAは1977年にロナルド・リーベスター(Ron Rivest)、アディ・サモア(Adi Shamir)、レンナード・アドマン(Leonard Adleman)とともに提案された.当時、彼ら3人はマサチューセッツ工科大学で働いていた.RSAは彼ら3人の姓の頭文字をつなぎ合わせて構成されている. 
アルゴリズムを知りたい方はこのリンクで詳しく紹介してください.
https://blog.csdn.net/ly131420/article/details/38400583
2.RSAコード
2つのjarパケット、Base 64およびBASE 64 Decoderが、トランスコードおよび復号のために必要である.
import java.security.KeyFactory;
import java.security.PrivateKey;
import java.security.PublicKey;
import java.security.spec.PKCS8EncodedKeySpec;
import java.security.spec.X509EncodedKeySpec;
import javax.crypto.Cipher;
import org.apache.commons.codec.binary.Base64;
import sun.misc.BASE64Decoder;

public class RSA {
	/**
	 *     
	 * 
	 * @param key       
	 */
	public static PrivateKey getPrivateKey(String key) throws Exception {
		byte[] keyBytes;
		keyBytes = (new BASE64Decoder()).decodeBuffer(key);
		PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(keyBytes);
		KeyFactory keyFactory = KeyFactory.getInstance("RSA");
		PrivateKey privateKey = keyFactory.generatePrivate(keySpec);
		return privateKey;
	}

	/**
	 *     
	 * 
	 * @param key       
	 */
	public static PublicKey getPublicKey(String key) throws Exception {
		byte[] keyBytes;
		keyBytes = (new BASE64Decoder()).decodeBuffer(key);
		X509EncodedKeySpec keySpec = new X509EncodedKeySpec(keyBytes);
		KeyFactory keyFactory = KeyFactory.getInstance("RSA");
		PublicKey publicKey = keyFactory.generatePublic(keySpec);
		return publicKey;
	}

	/**
	 *   
	 * 
	 * @param str_plaintext        
	 * @param str_publicKey     --   
	 * @param str_priK          --   
	 */
	public static String encrypt(String str_plaintext, String str_publicKey) throws Exception {
		PublicKey publicKey = getPublicKey(str_publicKey);
		Cipher cipher = Cipher.getInstance("RSA");
		cipher.init(Cipher.ENCRYPT_MODE, publicKey);
		byte[] bt_plaintext = str_plaintext.getBytes();
		byte[] bt_cipher = cipher.doFinal(bt_plaintext);
		return Base64.encodeBase64String(bt_cipher);
	}

	/**
	 *   
	 * 
	 * @param str_plaintext         
	 * @param str_pubK           --   
	 * @param str_privateKey     --   
	 */
	public static String decrypt(String str_cipher, String str_privateKey) throws Exception {
		PrivateKey privateKey = getPrivateKey(str_privateKey);
		Cipher cipher = Cipher.getInstance("RSA");
		cipher.init(Cipher.DECRYPT_MODE, privateKey);
		// return Base64.encodeBase64String(b);
		byte[] bt_encrypted = Base64.decodeBase64(str_cipher);
		byte[] bt_original = cipher.doFinal(bt_encrypted);
		String str_original = new String(bt_original);
		return str_original;
	}

	public static void main(String[] args) {
		String str_pubK = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCqPvovSfXcwBbW8cKMCgwqNpsYuzF8RPAPFb7LGsnVo44JhM/xxzDyzoYtdfNmtbIuKVi9PzIsyp6rg+09gbuI6UGwBZ5DWBDBMqv5MPdOF5dCQkB2Bbr5yPfURPENypUz+pBFBg41d+BC+rwRiXELwKy7Y9caD/MtJyHydj8OUwIDAQAB";
		String str_priK = "MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBAKo++i9J9dzAFtbxwowKDCo2mxi7MXxE8A8VvssaydWjjgmEz/HHMPLOhi1182a1si4pWL0/MizKnquD7T2Bu4jpQbAFnkNYEMEyq/kw904Xl0JCQHYFuvnI99RE8Q3KlTP6kEUGDjV34EL6vBGJcQvArLtj1xoP8y0nIfJ2Pw5TAgMBAAECgYAGGB8IllMwxceLhjf6n1l0IWRH7FuHIUieoZ6k0p6rASHSgWiYNRMxfecbtX8zDAoG0QAWNi7rn40ygpR5gS1fWDAKhmnhKgQIT6wW0VmD4hraaeyP78iy8BLhlvblri2nCPIhDH5+l96v7D47ZZi3ZSOzcj89s1eS/k7/N4peEQJBAPEtGGJY+lBoCxQMhGyzuzDmgcS1Un1ZE2pt+XNCVl2b+T8fxWJH3tRRR8wOY5uvtPiK1HM/IjT0T5qwQeH8Yk0CQQC0tcv3d/bDb7bOe9QzUFDQkUSpTdPWAgMX2OVPxjdq3Sls9oA5+fGNYEy0OgyqTjde0b4iRzlD1O0OhLqPSUMfAkEAh5FIvqezdRU2/PsYSR4yoAdCdLdT+h/jGRVefhqQ/6eYUJJkWp15tTFHQX3pIe9/s6IeT/XyHYAjaxmevxAmlQJBAKSdhvQjf9KAjZKDEsa7vyJ/coCXuQUWSCMNHbcR5aGfXgE4e45UtUoIE1eKGcd6AM6LWhx3rR6xdFDpb9je8BkCQB0SpevGfOQkMk5i8xkEt9eeYP0fi8nv6eOUcK96EXbzs4jV2SAoQJ9oJegPtPROHbhIvVUmNQTbuP10Yjg59+8=";

		String str_plaintext = "aaaaa";
		try {
			String encrypt = encrypt(str_plaintext, str_pubK);
			System.out.println("      :" + encrypt);
			String decrypt = decrypt(encrypt, str_priK);
			System.out.println("      :" + decrypt);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

}