一 介绍
唯一广泛接受并实现
用于数据加密和数字签名
公钥加密、私钥解密
私钥加密、公钥解密
二 RSA参数说明
三 实现
package com.imooc.security.rsa; 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 ImoocRSA { private static String src = "cakin24 security rsa"; public static void main(String[] args) { jdkRSA(); } 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 = 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(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 : MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAJcBeOb97IdkkirBmx3MOY5e4eRwh0uvC2BcNlY1rDo0lZ8ibR1bl1RJXWkHv7U0ASO/5DBlnnnGbQRtsJlsCPMCAwEAAQ==
Private Key : MIIBVAIBADANBgkqhkiG9w0BAQEFAASCAT4wggE6AgEAAkEAlwF45v3sh2SSKsGbHcw5jl7h5HCHS68LYFw2VjWsOjSVnyJtHVuXVEldaQe/tTQBI7/kMGWeecZtBG2wmWwI8wIDAQABAkAdSkPRSl+ew3s2n+cemIZxfyYB0XHs1D84qapAfpixkUNvWL0A4ovrwsnwt4MEjAtWVTufNvTxIZcZdx+Q5DbBAiEA9TzzYMGRU+3mdlAx0ICF+NIqwvlqyvedKa4KSx55gVUCIQCdoeX6mqGRP78aQjYKWeogwliszjU5fN/LFvKZrcgBJwIhAMvbBLzzaykHY0IKW75kd/lkSyOUTY+20bAp+miDRqGZAiA6r36eeRkzqUbtcL8LxYPb5F79HtxD5dCvnIB/ZGp0uwIgWtXI7IxHjYCsNomSJdu1J3dU9KqQuW/eOHxrk/OgUYE=
私钥加密、公钥解密——加密 : VjkFsOiVeLvKES5RprhsJK9tdTzohdELLS7yluidCYEe7DkuCM9srj8kwadynHI4M0oLAfJhK6447hp7Ia8x7A==
私钥加密、公钥解密——解密:cakin24 security rsa
公钥加密、私钥解密——加密 : gAWl73UxHtO+EfKkpmfMdhtK0Vh7HB8n+30l1Hp8aAMIagD21h2x/q/Ns+soGsOXNovuNzaSGZenmZzcjB4VEA==
公钥加密、私钥解密——解密:cakin24 security rsa
五 应用场景