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

您的位置:首頁技術文章
文章詳情頁

java RSAUtils 加密工具類操作

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

1.RSA加密算法是一種非對稱加密算法。在公開密鑰加密和電子商業中RSA被廣泛使用。RSA公開密鑰密碼體制。所謂的公開密鑰密碼體制就是使用不同的加密密鑰與解密密鑰,是一種“由已知加密密鑰推導出解密密鑰在計算上是不可行的”密碼體制。在公開密鑰密碼體制中,加密密鑰(即公開密鑰)PK是公開信息,而解密密鑰(即秘密密鑰)SK是需要保密的。加密算法E和解密算法D也都是公開的。雖然解密密鑰SK是由公開密鑰PK決定的,但卻不能根據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'; /** * 用私鑰對信息生成數字簽名 * * @param data 加密數據 * @param privateKey 私鑰 * @return * @throws Exception */ public static String sign(String data, String privateKey) throws Exception { return sign(data.getBytes(), privateKey); } /** * 用私鑰對信息生成數字簽名 * * @param data 加密數據 * @param privateKey 私鑰 * @return * @throws Exception */ public static String sign(byte[] data, String privateKey) throws Exception { // 解密由base64編碼的私鑰 byte[] keyBytes = decryptBASE64(privateKey); // 構造PKCS8EncodedKeySpec對象 PKCS8EncodedKeySpec pkcs8KeySpec = new PKCS8EncodedKeySpec(keyBytes); // KEY_ALGORITHM 指定的加密算法 KeyFactory keyFactory = KeyFactory.getInstance(KEY_ALGORITHM); // 取私鑰匙對象 PrivateKey priKey = keyFactory.generatePrivate(pkcs8KeySpec); // 用私鑰對信息生成數字簽名 Signature signature = Signature.getInstance(SIGNATURE_ALGORITHM); signature.initSign(priKey); signature.update(data); return encryptBASE64(signature.sign()); } /** * 校驗數字簽名 * * @param data 加密數據 * @param publicKey 公鑰 * @param sign 數字簽名 * @return 校驗成功返回true 失敗返回false * @throws Exception */ public static boolean verify(String data, String publicKey, String sign) throws Exception { return verify(data.getBytes(), publicKey, sign); } /** * 校驗數字簽名 * * @param data 加密數據 * @param publicKey 公鑰 * @param sign 數字簽名 * @return 校驗成功返回true 失敗返回false * @throws Exception */ public static boolean verify(byte[] data, String publicKey, String sign) throws Exception { // 解密由base64編碼的公鑰 byte[] keyBytes = decryptBASE64(publicKey); // 構造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); // 對數據解密 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); // 對數據解密 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); // 對數據加密 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); // 對數據加密 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.最后展示測試結果:

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 { /** * 密鑰長度 于原文長度對應 以及越長速度越慢 */ private final static int KEY_SIZE = 1024; /** * 用于封裝隨機產生的公鑰與私鑰 */ 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 加密工具類操作就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持好吧啦網。

標簽: Java
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
国产精久久一区二区| 岛国av免费在线观看| 国产精品宾馆| 喷白浆一区二区| 国产一区二区三区四区二区| 麻豆精品少妇| 一区二区电影在线观看| 中文字幕亚洲精品乱码| 婷婷六月综合| 亚洲欧美日韩国产一区| 国产一区成人| 亚洲一区二区三区久久久| 欧美.日韩.国产.一区.二区 | 中文字幕一区二区av| 美女精品在线观看| 五月婷婷亚洲| 九九久久电影| 中文字幕乱码亚洲无线精品一区| 美女精品在线观看| 免播放器亚洲| 日韩视频一区| 黑丝一区二区三区| 亚洲综合婷婷| 蜜臀av亚洲一区中文字幕| 亚洲精品乱码日韩| 欧美视频精品全部免费观看| 日韩一区中文| 国产欧美另类| 国产精品对白| 精品久久精品| 亚洲天堂成人| 99国产精品视频免费观看一公开| 亚洲乱码一区| 青青草精品视频| 亚洲精品少妇| 卡一精品卡二卡三网站乱码| 久久精品福利| 超碰成人av| 国产精品美女久久久| 性色一区二区| 麻豆精品99| 日韩免费一区| 国精品一区二区| 日韩影片在线观看| 国产精品草草| 国产伊人精品| 一区二区三区国产盗摄| 国产日产精品_国产精品毛片 | 91嫩草精品| 久久精品国产亚洲aⅴ| 日韩网站中文字幕| 精品91久久久久| 亚洲深夜福利在线观看| 精品久久91| 国产一区二区精品福利地址| 精品视频高潮| 成人美女视频| 日韩视频免费| 亚洲免费毛片| 国产福利一区二区三区在线播放| 麻豆久久一区二区| 欧美亚洲国产一区| 视频一区中文字幕| 国产精品视频一区二区三区| 激情婷婷久久| 一区二区三区四区在线观看国产日韩| 国产精品亚洲一区二区在线观看| 伊人精品一区| 日韩高清电影一区| 久久中文字幕av一区二区不卡| 午夜视频一区二区在线观看| 精品视频黄色| 综合视频一区| 亚洲黄色网址| 国产日韩三级| 99久精品视频在线观看视频| 亚洲日本欧美| 国产一区二区精品福利地址| 狠狠久久婷婷| 亚洲欧洲免费| a日韩av网址| 亚洲一二av| 99久精品视频在线观看视频| 欧美一级网站| 午夜欧美精品| 国产欧美三级| 天堂网在线观看国产精品| 久久97久久97精品免视看秋霞| 亚洲国产一区二区在线观看| 久久精品女人| 亚洲理论在线| 91av亚洲| 欧美亚洲综合视频| 五月天久久网站| 久久不卡国产精品一区二区| 精品日韩毛片| 久久只有精品| 中文不卡在线| 三上悠亚国产精品一区二区三区| 人人精品久久| 在线中文字幕播放| 日韩视频1区| 欧美手机在线| 麻豆视频一区二区| 天堂va在线高清一区| 亚洲国产日韩欧美在线| 欧美久久久网站| 激情久久婷婷| 91免费精品| 久久精品国产久精国产| 少妇精品在线| 欧美~级网站不卡| 国产拍在线视频| 日韩高清一级| 欧美一区二区三区激情视频| 国产一区一一区高清不卡| 日本亚洲视频| 91久久午夜| 日韩免费福利视频| 久久精品国产成人一区二区三区| 亚洲精品字幕| 欧美~级网站不卡| 日韩精品中文字幕第1页| 国产欧美激情| 国产精品15p| 国产欧美一区二区精品久久久| 青草国产精品| 免费观看日韩电影| 制服诱惑一区二区| 亚洲男女自偷自拍| 精品免费在线| 在线精品一区二区| 麻豆视频在线看| 国产精品欧美三级在线观看| 精品久久久中文字幕| 欧美日韩国产高清| 欧美精品一区二区三区精品| 久久精品免费看| 国产精品美女午夜爽爽| 国产精品免费99久久久| 日韩中文字幕| 国产高清日韩| 国产精品久久久久久妇女| 老鸭窝一区二区久久精品| 男人操女人的视频在线观看欧美| 亚洲激情久久| 中文精品视频| 婷婷国产精品| 蜜桃国内精品久久久久软件9| 天堂中文在线播放| 国产精品一区亚洲| 电影91久久久| 麻豆成人在线观看| 日本欧美不卡| 精品一区毛片| 欧美福利专区| 三级久久三级久久久| 日韩激情av在线| 亚洲欧美日韩高清在线| 亚洲作爱视频| 日韩精品午夜视频| 亚欧洲精品视频在线观看| 91精品推荐| 一区在线免费观看| 石原莉奈在线亚洲二区| 欧美另类中文字幕| 国产麻豆精品| 久久影院一区二区三区| 精品日本视频| 日韩一区欧美| 亚洲最大av| 国产无遮挡裸体免费久久| 国内在线观看一区二区三区| 美腿丝袜亚洲三区| 亚洲二区视频| 免费在线视频一区| 亚洲一区亚洲| 国产精品一国产精品k频道56| 久久亚洲黄色| 91久久中文| 中文视频一区| 国产 日韩 欧美 综合 一区| 中文在线免费视频| 日韩精品一二三四| 欧美黄色一区| 亚洲日本网址| 综合亚洲视频| 久久精品国产亚洲一区二区三区| 欧美日韩四区| 日韩在线观看中文字幕| 国产精品一区二区免费福利视频| 99久久夜色精品国产亚洲1000部 | 亚洲精品乱码久久久久久蜜桃麻豆| 97久久超碰| 久久精品国产网站| 深夜日韩欧美| 免费观看亚洲天堂| 美女国产一区| 久久久国产精品入口麻豆| 亚洲少妇诱惑|