依赖
<dependency> <groupId>commons-codec</groupId> <artifactId>commons-codec</artifactId> </dependency>
代码
import org.apache.commons.codec.binary.Base64; import javax.crypto.BadPaddingException; import javax.crypto.Cipher; import javax.crypto.IllegalBlockSizeException; import javax.crypto.NoSuchPaddingException; import java.io.UnsupportedEncodingException; import java.security.*; import java.security.interfaces.RSAPublicKey; import java.security.spec.InvalidKeySpecException; import java.security.spec.PKCS8EncodedKeySpec; import java.security.spec.X509EncodedKeySpec; import java.util.HashMap; import java.util.Map; /** * Hello RSA! * */ public class RSAUtils { private static Map<Integer,String> keyMap=new HashMap<>(); public static void main( String[] args ) throws Exception { //生成公钥和私钥 // getKeyPair(); //加密字符串 String password="3"; String pub = "MIGfMA0GCSqGSIbxn/KV5/gdt1KlKTmeLDqj3ai6loqEMW/qYKHmXxO8E3++5gIW6FOCj/KkT+4laTxhoQwXDRdmuoRxF3oXnrMx3/w4zz2MwNFGC7XQmiQJQhtwzJnDGr8fCPQIDAQAB"; String pri = "MIICeAIBADQ1v8HJ4FD4FXh1bf8mX4pC3bGf8pXn+B23UqUpOZ9QBh2LG8X8mtipFFVQYTS0okRsyUKmcGxNLkGxL3rKQSB56fcA6TV+bbfjXrNLnWo3+H0r5r2+OWvm01/KLFe3R69HJCgDNuRjSWUr9j/1Vb83FYCTT3NyTAyjoi9fvGql+178noSOmDPoUsYl/9557Pkpk/NPCpOnVO4QJBAObd1i9P2W40MbmRTwGGZN8aOayCHBabtrq14NZ/njvlk7JYxt6gMBj0eG3PfXxT+gpaZi1QSEuEyN6unN+mL4cCQQCziDouqX9om5PZkEucwFJtXoxqv0+pNDSwoLx7kto0ch7IDCAc3c0l39dAFqKLsNVZKwUZbYCSncKI0XV1AwkbAkEAiZpzjSOUv0DQ2oAnjQsjmG6zLYUnZLpPAZ5icrcCA0Vk8QpFDnB/+n/MP/dKHg6XnBAhkqSlUo3EhCWjTxJohQJBAKogtcHyLSJcC8dnzb9FINczeazOjhaxuhyGtRYFG3IHktPPab7xEK6LZ9b7nBzz/bj542MtOWG2zdoJY1z2+3ECQQC1soAOuQ/c4zPnAoJKQ5GIqPOrHvrqTrcIEa5Xkf61Mn501Oa0GXDHpUsynuKNHmGSRXERA6TqahY+6zPm8a4O"; System.out.println("随机生成的公钥为:" + pub); System.out.println("随机生成的私钥为:"+ pri); String passwordEn=encrypt(password,pub); System.out.println(password+"\t加密后的字符串为:"+passwordEn); String passwordDe=decrypt(passwordEn,pri); System.out.println("还原后的字符串为:"+passwordDe); } /** * 随机生成密钥对 * @throws NoSuchAlgorithmException */ public static void getKeyPair() throws Exception { //KeyPairGenerator类用于生成公钥和密钥对,基于RSA算法生成对象 KeyPairGenerator keyPairGen = KeyPairGenerator.getInstance("RSA"); //初始化密钥对生成器,密钥大小为96-1024位 keyPairGen.initialize(1024,new SecureRandom()); //生成一个密钥对,保存在keyPair中 KeyPair keyPair = keyPairGen.generateKeyPair(); PrivateKey privateKey = keyPair.getPrivate();//得到私钥 PublicKey publicKey = keyPair.getPublic();//得到公钥 //得到公钥字符串 String publicKeyString=new String(Base64.encodeBase64(publicKey.getEncoded())); //得到私钥字符串 String privateKeyString=new String(Base64.encodeBase64(privateKey.getEncoded())); //将公钥和私钥保存到Map keyMap.put(0,publicKeyString);//0表示公钥 keyMap.put(1,privateKeyString);//1表示私钥 } /** * RSA公钥加密 * * @param str * 加密字符串 * @param publicKey * 公钥 * @return 密文 * @throws Exception * 加密过程中的异常信息 */ public static String encrypt(String str,String publicKey) throws Exception { //base64编码的公钥 byte[] decoded = Base64.decodeBase64(publicKey); RSAPublicKey pubKey= (RSAPublicKey) KeyFactory.getInstance("RSA").generatePublic(new X509EncodedKeySpec(decoded)); //RAS加密 Cipher cipher = Cipher.getInstance("RSA"); cipher.init(Cipher.ENCRYPT_MODE,pubKey); String outStr=Base64.encodeBase64String(cipher.doFinal(str.getBytes("UTF-8"))); return outStr; } /** * RSA私钥解密 * * @param str * 加密字符串 * @param privateKey * 私钥 * @return 铭文 * @throws Exception * 解密过程中的异常信息 */ public static String decrypt(String str,String privateKey) throws Exception { //Base64解码加密后的字符串 byte[] inputByte = Base64.decodeBase64(str.getBytes("UTF-8")); //Base64编码的私钥 byte[] decoded = Base64.decodeBase64(privateKey); PrivateKey priKey = KeyFactory.getInstance("RSA").generatePrivate(new PKCS8EncodedKeySpec(decoded)); //RSA解密 Cipher cipher = Cipher.getInstance("RSA"); cipher.init(Cipher.DECRYPT_MODE,priKey); String outStr=new String(cipher.doFinal(inputByte)); return outStr; } }
标签:公钥,私钥,String,Base64,加解密,RSA,import From: https://www.cnblogs.com/dongma/p/16825113.html