1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > JAVA RSA加密解密代码范例(Base64版)

JAVA RSA加密解密代码范例(Base64版)

时间:2019-09-13 10:37:53

相关推荐

JAVA RSA加密解密代码范例(Base64版)

测试通过:

package tsoffice;import javax.crypto.Cipher;import java.security.KeyFactory;import java.security.KeyPair;import java.security.KeyPairGenerator;import java.security.NoSuchAlgorithmException;import java.security.SecureRandom;import java.security.interfaces.RSAPrivateKey;import java.security.interfaces.RSAPublicKey;import java.security.spec.PKCS8EncodedKeySpec;import java.security.spec.X509EncodedKeySpec;import java.util.HashMap;import java.util.Map;import java.util.Base64;public final class TestRSA{private final static String ALGORITHM = "RSA";private static final String CHARSET = "utf-8";/*** 密钥长度 于原文长度对应 以及越长速度越慢*/private final static int KEY_SIZE = 512;/*** 用于封装随机产生的公钥与私钥*/private static Map<Integer, String> keyMap = new HashMap<Integer, String>();/*** 随机生成密钥对*/public static void genKeyPair() throws NoSuchAlgorithmException {KeyPairGenerator keyPairGen = KeyPairGenerator.getInstance(ALGORITHM);keyPairGen.initialize(KEY_SIZE, new SecureRandom());KeyPair keyPair = keyPairGen.generateKeyPair();RSAPrivateKey privateKey = (RSAPrivateKey) keyPair.getPrivate();RSAPublicKey publicKey = (RSAPublicKey) keyPair.getPublic();String publicKeyString = Base64.getEncoder().encodeToString(publicKey.getEncoded());String privateKeyString = Base64.getEncoder().encodeToString(privateKey.getEncoded());keyMap.put(0, publicKeyString);keyMap.put(1, privateKeyString);}public static String encrypt(String str, String publicKey) throws Exception {//base64编码的公钥byte[] decoded = Base64.getDecoder().decode(publicKey);RSAPublicKey pubKey = (RSAPublicKey) KeyFactory.getInstance(ALGORITHM).generatePublic(new X509EncodedKeySpec(decoded));//RSA加密Cipher cipher = Cipher.getInstance(ALGORITHM);cipher.init(Cipher.ENCRYPT_MODE, pubKey);byte[] encrypted = cipher.doFinal(str.getBytes(CHARSET));System.out.println("encrypted="+encrypted.length);return Base64.getEncoder().encodeToString(encrypted);}public static String decrypt(String str, String privateKey) throws Exception {//64位解码加密后的字符串byte[] inputByte = Base64.getDecoder().decode(str);//base64编码的私钥byte[] decoded = Base64.getDecoder().decode(privateKey);RSAPrivateKey priKey = (RSAPrivateKey) KeyFactory.getInstance(ALGORITHM).generatePrivate(new PKCS8EncodedKeySpec(decoded));//RSA解密Cipher cipher = Cipher.getInstance(ALGORITHM);cipher.init(Cipher.DECRYPT_MODE, priKey);return new String(cipher.doFinal(inputByte));}public static void main(String[] args) throws Exception {long temp = System.currentTimeMillis();//生成公钥和私钥genKeyPair();//加密字符串System.out.println("公钥:" + keyMap.get(0).length());System.out.println("私钥:" + keyMap.get(1).length());System.out.println("生成密钥消耗时间:" + (System.currentTimeMillis() - temp) / 1000.0 + "秒");String message = "RSA测试:泰山Office";System.out.println("原文:" + message);temp = System.currentTimeMillis();String messageEn = encrypt(message, keyMap.get(0));System.out.println("密文:" + messageEn);System.out.println("加密消耗时间:" + (System.currentTimeMillis() - temp) / 1000.0 + "秒");temp = System.currentTimeMillis();String messageDe = decrypt(messageEn, keyMap.get(1));System.out.println("解密:" + messageDe);System.out.println("解密消耗时间:" + (System.currentTimeMillis() - temp) / 1000.0 + "秒");}}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。