日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術(shù)文章
文章詳情頁

java RSAUtils 加密工具類操作

瀏覽:21日期:2022-08-26 18:38:45

1.RSA加密算法是一種非對稱加密算法。在公開密鑰加密和電子商業(yè)中RSA被廣泛使用。RSA公開密鑰密碼體制。所謂的公開密鑰密碼體制就是使用不同的加密密鑰與解密密鑰,是一種“由已知加密密鑰推導(dǎo)出解密密鑰在計算上是不可行的”密碼體制。在公開密鑰密碼體制中,加密密鑰(即公開密鑰)PK是公開信息,而解密密鑰(即秘密密鑰)SK是需要保密的。加密算法E和解密算法D也都是公開的。雖然解密密鑰SK是由公開密鑰PK決定的,但卻不能根據(jù)PK計算出SK。

2.本工具類涉及到BASE64編碼,所以先展示出BASE64Utils:

package com.example.springboottest.common.util; import sun.misc.BASE64Decoder;import sun.misc.BASE64Encoder;import java.security.MessageDigest; /** * BASE64的加解密 * @author Neo * @date 2018-4-15 22:21:51 * */@SuppressWarnings('restriction')public class Base64Utils { public static final String KEY_SHA = 'SHA'; public static final String KEY_MD5 = 'MD5'; /** * BASE64解密 * * @param key * @return * @throws Exception */ public static byte[] decryptBASE64(String key) throws Exception { return (new BASE64Decoder()).decodeBuffer(key); } /** * BASE64加密 * * @param key * @return * @throws Exception */ public static String encryptBASE64(byte[] key) throws Exception { return (new BASE64Encoder()).encodeBuffer(key); } /** * MD5加密 * * @param data * @return * @throws Exception */ public static byte[] encryptMD5(byte[] data) throws Exception { MessageDigest md5 = MessageDigest.getInstance(KEY_MD5); md5.update(data); return md5.digest(); } /** * SHA加密 * * @param data * @return * @throws Exception */ public static byte[] encryptSHA(byte[] data) throws Exception { MessageDigest sha = MessageDigest.getInstance(KEY_SHA); sha.update(data); return sha.digest(); } }

3.然后我們展示RSAUtils:

package com.example.springboottest.common.util; import javax.crypto.Cipher;import java.security.*;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; /** * RSA安全編碼組件 * * @version 1.0 * @desc 公鑰和私鑰存放在properties文件的時候每行的末尾加上“rn” <br/> * “rn” 起到換行的作用,最后的“”在properties在里表示連接 * * @author Neo * @date 2018-4-15 22:23:19 * @since 1.0 */public class RSAUtils extends Base64Utils { public static final String KEY_ALGORITHM = 'RSA'; public static final String SIGNATURE_ALGORITHM = 'MD5withRSA'; private static final String PUBLIC_KEY = 'RSAPublicKey'; private static final String PRIVATE_KEY = 'RSAPrivateKey'; /** * 用私鑰對信息生成數(shù)字簽名 * * @param data 加密數(shù)據(jù) * @param privateKey 私鑰 * @return * @throws Exception */ public static String sign(String data, String privateKey) throws Exception { return sign(data.getBytes(), privateKey); } /** * 用私鑰對信息生成數(shù)字簽名 * * @param data 加密數(shù)據(jù) * @param privateKey 私鑰 * @return * @throws Exception */ public static String sign(byte[] data, String privateKey) throws Exception { // 解密由base64編碼的私鑰 byte[] keyBytes = decryptBASE64(privateKey); // 構(gòu)造PKCS8EncodedKeySpec對象 PKCS8EncodedKeySpec pkcs8KeySpec = new PKCS8EncodedKeySpec(keyBytes); // KEY_ALGORITHM 指定的加密算法 KeyFactory keyFactory = KeyFactory.getInstance(KEY_ALGORITHM); // 取私鑰匙對象 PrivateKey priKey = keyFactory.generatePrivate(pkcs8KeySpec); // 用私鑰對信息生成數(shù)字簽名 Signature signature = Signature.getInstance(SIGNATURE_ALGORITHM); signature.initSign(priKey); signature.update(data); return encryptBASE64(signature.sign()); } /** * 校驗數(shù)字簽名 * * @param data 加密數(shù)據(jù) * @param publicKey 公鑰 * @param sign 數(shù)字簽名 * @return 校驗成功返回true 失敗返回false * @throws Exception */ public static boolean verify(String data, String publicKey, String sign) throws Exception { return verify(data.getBytes(), publicKey, sign); } /** * 校驗數(shù)字簽名 * * @param data 加密數(shù)據(jù) * @param publicKey 公鑰 * @param sign 數(shù)字簽名 * @return 校驗成功返回true 失敗返回false * @throws Exception */ public static boolean verify(byte[] data, String publicKey, String sign) throws Exception { // 解密由base64編碼的公鑰 byte[] keyBytes = decryptBASE64(publicKey); // 構(gòu)造X509EncodedKeySpec對象 X509EncodedKeySpec keySpec = new X509EncodedKeySpec(keyBytes); // KEY_ALGORITHM 指定的加密算法 KeyFactory keyFactory = KeyFactory.getInstance(KEY_ALGORITHM); // 取公鑰匙對象 PublicKey pubKey = keyFactory.generatePublic(keySpec); Signature signature = Signature.getInstance(SIGNATURE_ALGORITHM); signature.initVerify(pubKey); signature.update(data); // 驗證簽名是否正常 return signature.verify(decryptBASE64(sign)); } /** * 解密<br> * 用私鑰解密 * * @param data * @param key * @return * @throws Exception */ public static String decryptByPrivateKey(String data, String key) throws Exception { return new String(decryptByPrivateKey(Base64Utils.decryptBASE64(data), key)); } /** * 解密<br> * 用私鑰解密 * * @param data * @param key * @return * @throws Exception */ public static byte[] decryptByPrivateKey(byte[] data, String key) throws Exception { // 對密鑰解密 byte[] keyBytes = decryptBASE64(key); // 取得私鑰 PKCS8EncodedKeySpec pkcs8KeySpec = new PKCS8EncodedKeySpec(keyBytes); KeyFactory keyFactory = KeyFactory.getInstance(KEY_ALGORITHM); Key privateKey = keyFactory.generatePrivate(pkcs8KeySpec); // 對數(shù)據(jù)解密 Cipher cipher = Cipher.getInstance(keyFactory.getAlgorithm()); cipher.init(Cipher.DECRYPT_MODE, privateKey); return cipher.doFinal(data); } /** * 解密<br> * 用私鑰解密 * * @param data * @param key * @return * @throws Exception */ public static String decryptByPublicKey(String data, String key) throws Exception { return new String(decryptByPublicKey(Base64Utils.decryptBASE64(data), key)); } /** * 解密<br> * 用私鑰解密 * * @param data * @param key * @return * @throws Exception */ public static byte[] decryptByPublicKey(byte[] data, String key) throws Exception { // 對密鑰解密 byte[] keyBytes = decryptBASE64(key); // 取得公鑰 X509EncodedKeySpec x509KeySpec = new X509EncodedKeySpec(keyBytes); KeyFactory keyFactory = KeyFactory.getInstance(KEY_ALGORITHM); Key publicKey = keyFactory.generatePublic(x509KeySpec); // 對數(shù)據(jù)解密 Cipher cipher = Cipher.getInstance(keyFactory.getAlgorithm()); cipher.init(Cipher.DECRYPT_MODE, publicKey); return cipher.doFinal(data); } /** * 加密<br> * 用公鑰加密 * * @param data * @param key * @return * @throws Exception */ public static String encryptByPublicKey(String data, String key) throws Exception { return Base64Utils.encryptBASE64(encryptByPublicKey(data.getBytes(), key)); } /** * 加密<br> * 用公鑰加密 * * @param data * @param key * @return * @throws Exception */ public static byte[] encryptByPublicKey(byte[] data, String key) throws Exception { // 對公鑰解密 byte[] keyBytes = decryptBASE64(key); // 取得公鑰 X509EncodedKeySpec x509KeySpec = new X509EncodedKeySpec(keyBytes); KeyFactory keyFactory = KeyFactory.getInstance(KEY_ALGORITHM); Key publicKey = keyFactory.generatePublic(x509KeySpec); // 對數(shù)據(jù)加密 Cipher cipher = Cipher.getInstance(keyFactory.getAlgorithm()); cipher.init(Cipher.ENCRYPT_MODE, publicKey); return cipher.doFinal(data); } /** * 加密<br> * 用私鑰加密 * * @param data * @param key * @return * @throws Exception */ public static String encryptByPrivateKey(String data, String key) throws Exception { return Base64Utils.encryptBASE64(encryptByPrivateKey(data.getBytes(), key)); } /** * 加密<br> * 用私鑰加密 * * @param data * @param key * @return * @throws Exception */ public static byte[] encryptByPrivateKey(byte[] data, String key) throws Exception { // 對密鑰解密 byte[] keyBytes = decryptBASE64(key); // 取得私鑰 PKCS8EncodedKeySpec pkcs8KeySpec = new PKCS8EncodedKeySpec(keyBytes); KeyFactory keyFactory = KeyFactory.getInstance(KEY_ALGORITHM); Key privateKey = keyFactory.generatePrivate(pkcs8KeySpec); // 對數(shù)據(jù)加密 Cipher cipher = Cipher.getInstance(keyFactory.getAlgorithm()); cipher.init(Cipher.ENCRYPT_MODE, privateKey); return cipher.doFinal(data); } /** * 取得私鑰 * * @param keyMap * @return * @throws Exception */ public static String getPrivateKey(Map<String, Object> keyMap) throws Exception { Key key = (Key) keyMap.get(PRIVATE_KEY); return encryptBASE64(key.getEncoded()); } /** * 取得公鑰 * * @param keyMap * @return * @throws Exception */ public static String getPublicKey(Map<String, Object> keyMap) throws Exception { Key key = (Key) keyMap.get(PUBLIC_KEY); return encryptBASE64(key.getEncoded()); } /** * 初始化密鑰 * * @return * @throws Exception */ public static Map<String, Object> initKey() throws Exception { KeyPairGenerator keyPairGen = KeyPairGenerator.getInstance(KEY_ALGORITHM); keyPairGen.initialize(1024); KeyPair keyPair = keyPairGen.generateKeyPair(); // 公鑰 RSAPublicKey publicKey = (RSAPublicKey) keyPair.getPublic(); // 私鑰 RSAPrivateKey privateKey = (RSAPrivateKey) keyPair.getPrivate(); Map<String, Object> keyMap = new HashMap<String, Object>(2); keyMap.put(PUBLIC_KEY, publicKey); keyMap.put(PRIVATE_KEY, privateKey); return keyMap; } public static void main(String[] args) { try { Map<String, Object> map = RSAUtils.initKey(); String publicKey = RSAUtils.getPublicKey(map); String privateKey = RSAUtils.getPrivateKey(map); System.out.println('公鑰:' + publicKey); System.out.println('私鑰:' + privateKey); String data = 'Java是世界上最好的編程語言'; String encryptData = RSAUtils.encryptByPublicKey(data, publicKey); System.out.println('加密后:' + encryptData); String decryptData = RSAUtils.decryptByPrivateKey(encryptData, privateKey); System.out.println('解密后:' + decryptData); } catch (Exception e) { e.printStackTrace(); } }}

4.最后展示測試結(jié)果:

java RSAUtils 加密工具類操作

補充知識:java使用RSA生成公鑰和私鑰,并進行加解密

廢話不多說,上代碼:

import javax.crypto.Cipher;import sun.misc.BASE64Decoder;import sun.misc.BASE64Encoder; import java.security.KeyFactory;import java.security.KeyPair;import java.security.KeyPairGenerator;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; /** * Java RSA 加密工具類 */public class RSAUtils { /** * 密鑰長度 于原文長度對應(yīng) 以及越長速度越慢 */ private final static int KEY_SIZE = 1024; /** * 用于封裝隨機產(chǎn)生的公鑰與私鑰 */ private static Map<Integer, String> keyMap = new HashMap<Integer, String>(); /** * 隨機生成密鑰對 * @throws Exception */ public static void genKeyPair() throws Exception { // KeyPairGenerator類用于生成公鑰和私鑰對,基于RSA算法生成對象 KeyPairGenerator keyPairGen = KeyPairGenerator.getInstance('RSA'); // 初始化密鑰對生成器 keyPairGen.initialize(KEY_SIZE, new SecureRandom()); // 生成一個密鑰對,保存在keyPair中 KeyPair keyPair = keyPairGen.generateKeyPair(); // 得到私鑰 RSAPrivateKey privateKey = (RSAPrivateKey) keyPair.getPrivate(); // 得到公鑰 RSAPublicKey publicKey = (RSAPublicKey) keyPair.getPublic(); String publicKeyString = encryptBASE64(publicKey.getEncoded()); // 得到私鑰字符串 String privateKeyString = encryptBASE64(privateKey.getEncoded()); // 將公鑰和私鑰保存到Map //0表示公鑰 keyMap.put(0, publicKeyString); //1表示私鑰 keyMap.put(1, privateKeyString); } //編碼返回字符串 public static String encryptBASE64(byte[] key) throws Exception { return (new BASE64Encoder()).encodeBuffer(key); } //解碼返回byte public static byte[] decryptBASE64(String key) throws Exception { return (new BASE64Decoder()).decodeBuffer(key); } /** * RSA公鑰加密 * * @param str 加密字符串 * @param publicKey 公鑰 * @return 密文 * @throws Exception 加密過程中的異常信息 */ public static String encrypt(String str, String publicKey) throws Exception { //base64編碼的公鑰 byte[] decoded = decryptBASE64(publicKey); RSAPublicKey pubKey = (RSAPublicKey) KeyFactory.getInstance('RSA').generatePublic(new X509EncodedKeySpec(decoded)); //RSA加密 Cipher cipher = Cipher.getInstance('RSA'); cipher.init(Cipher.ENCRYPT_MODE, pubKey); String outStr = encryptBASE64(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 { //64位解碼加密后的字符串 byte[] inputByte = decryptBASE64(str); //base64編碼的私鑰 byte[] decoded = decryptBASE64(privateKey); RSAPrivateKey priKey = (RSAPrivateKey) 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; } public static void main(String[] args) throws Exception { long temp = System.currentTimeMillis(); //生成公鑰和私鑰 genKeyPair(); //加密字符串 System.out.println('公鑰:' + keyMap.get(0)); System.out.println('私鑰:' + keyMap.get(1)); System.out.println('生成密鑰消耗時間:' + (System.currentTimeMillis() - temp) / 1000.0 + '秒'); String message = 'RSA測試aaa'; 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 + '秒'); }}

以上這篇java RSAUtils 加密工具類操作就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持好吧啦網(wǎng)。

標(biāo)簽: Java
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
久久中文视频| 久久国产福利| 日韩精品国产精品| 亚洲欧美日韩国产一区| 在线亚洲自拍| 午夜久久一区| 夜久久久久久| 日韩影院在线观看| 色综合视频一区二区三区日韩 | 久久福利精品| 久久av一区二区三区| 蜜桃久久精品一区二区| 日韩国产在线观看一区| 欧美专区一区| 国产日产一区| 日韩综合在线| 群体交乱之放荡娇妻一区二区| 日韩毛片在线| 欧美日韩四区| 日韩精品一区二区三区av| 国产精久久一区二区| 老司机免费视频一区二区| 在线天堂中文资源最新版| 欧洲毛片在线视频免费观看| 亚洲综合婷婷| 欧美a一区二区| 久久精品青草| 亚洲青青久久| 精品国产亚洲一区二区三区大结局| sm久久捆绑调教精品一区| 不卡中文字幕| 欧美日韩精品一区二区三区在线观看| 精品一区二区三区中文字幕视频 | 999久久久精品国产| 久久亚洲电影| 欧美交a欧美精品喷水| 久久中文视频| 日韩精品高清不卡| 欧美aa一级| 爽好多水快深点欧美视频| 欧美日韩一区二区三区不卡视频| 久久久久久自在自线| 一区福利视频| 精品福利久久久| 精品久久亚洲| 91精品国产成人观看| 亚洲免费毛片| 精品深夜福利视频| 一本一本久久| 精品视频一区二区三区四区五区| 亚洲午夜黄色| 国产乱码精品| 最新亚洲激情| 精品国产日韩欧美精品国产欧美日韩一区二区三区 | 国产精品日韩久久久| 日韩精品第一| 久久久久国产一区二区| 色综合视频一区二区三区日韩 | 国产精品一区亚洲| 国产日产精品_国产精品毛片| 日韩伦理福利| 婷婷五月色综合香五月| 欧美日韩国产观看视频| 一区二区三区四区日韩| 四虎8848精品成人免费网站| 蜜臀av性久久久久蜜臀aⅴ四虎| 精品国产欧美| 蜜臀av国产精品久久久久| 天堂中文av在线资源库| 免费观看久久久4p| 在线天堂资源www在线污| 日韩成人在线看| 欧美另类综合| 国产videos久久| 日韩精品欧美大片| 午夜久久免费观看| 国产精品99一区二区三| 四虎精品一区二区免费| 99久久久国产精品美女| 麻豆久久一区二区| 亚洲精品无播放器在线播放| 三级小说欧洲区亚洲区| 国产极品一区| 日本aⅴ亚洲精品中文乱码| 欧美日韩亚洲在线观看| 美女av一区| 欧美一区=区三区| 日韩影院免费视频| av最新在线| 蜜桃av一区| 久久中文字幕二区| 国产精品成久久久久| 久久精品超碰| 亚洲精选成人| 美女国产精品| 国产精品毛片| 蜜桃成人av| 日韩高清中文字幕一区二区| 国产中文欧美日韩在线| 日韩精品一区二区三区免费视频 | 午夜在线观看免费一区| 亚洲先锋成人| 日韩专区精品| 成人一二三区| 精品中文在线| 久久精品国产亚洲一区二区三区| 日本久久一区| 午夜亚洲福利| 亚洲不卡视频| 日本aⅴ亚洲精品中文乱码| 日韩制服丝袜av| 国产美女精品| 悠悠资源网久久精品| 色天使综合视频| 亚洲精品国产嫩草在线观看| 欧美日韩在线观看首页| 欧美日韩精品免费观看视欧美高清免费大片| 国产一区二区三区亚洲综合| 久久精品国产福利| 久久av日韩| 欧美精品第一区| 国产精品久久久久久模特| 欧美日韩亚洲国产精品| 国产精品日韩精品在线播放| 亚洲精品人人| 亚洲免费高清| 亚洲一区欧美二区| 国产一区91| 婷婷激情一区| 日韩精品久久久久久久电影99爱| 日韩一区二区三区免费播放| 日韩欧美一区二区三区免费观看| 亚洲精品国产嫩草在线观看| 亚洲成人国产| 中文久久精品| 亚洲区欧美区| 日韩成人一级| 国产日韩一区二区三免费高清 | 国产一区一一区高清不卡| 国产一区二区三区网| 精品九九久久| 日韩激情一区| 不卡视频在线| 亚洲精品大全| 欧美精品成人| 欧美日韩尤物久久| 久久国产精品久久w女人spa| 免播放器亚洲一区| 国产精品夜夜夜| 日韩av二区| 亚洲激情五月| 日韩精品福利一区二区三区| 麻豆精品在线视频| 视频福利一区| 欧美特黄一级大片| 国产精品国产一区| 成人羞羞视频播放网站| 国产视频一区欧美| 91久久精品无嫩草影院| 精品久久久中文字幕| 特黄特色欧美大片| 热久久国产精品| 国产精品扒开腿做爽爽爽软件| 高清一区二区| 日韩视频二区| 久久国产乱子精品免费女| 97欧美在线视频| 久久亚洲国产精品一区二区| 欧美1区二区| 欧美特黄a级高清免费大片a级| 亚洲一级大片| 日本黄色精品| 一区二区亚洲视频| 国产a亚洲精品| 天堂成人免费av电影一区 | 欧美日韩亚洲国产精品| 日韩在线欧美| 日韩欧美高清一区二区三区| av免费不卡国产观看| 久久国产精品99国产| 精品五月天堂| 免费看日韩精品| 日韩久久电影| 欧美午夜网站| 999国产精品999久久久久久| 91亚洲无吗| 五月天激情综合网| 里番精品3d一二三区| 在线亚洲成人| 97精品一区二区| 亚洲精品观看| 亚洲精品一区三区三区在线观看| 日韩欧乱色一区二区三区在线| 日韩中文在线电影| 日本三级亚洲精品| 欧美日韩国产精品一区二区亚洲| 久久精品国产久精国产爱| 婷婷综合福利| 欧美精品一卡| 黄在线观看免费网站ktv|