日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

转:常用的几种加密算法以及java实现

發布時間:2023/12/3 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 转:常用的几种加密算法以及java实现 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

轉自:??https://blog.csdn.net/wqwqwqwq403/article/details/103948952

?

工作中經常會接觸到一些加密算法,比如說base64、MD5、DES、AES等等,那么這些算法到底有什么區別以及具體的應用場景是什么呢,下面就做個簡要的梳理。

一、什么是加/解密,目的是什么?

所謂加密,就是對原來為明文的文件或數據按某種算法進行處理,使其成為不可讀的一段代碼,通常稱為 “密文”。目的就是保護數據不被非法竊取、閱讀。
所謂解密,也就是加密的逆過程,即將該密文信息轉化為其原來數據的過程。
舉個例子:小王想給他的妻子寫一封信,如果在郵寄的過程中,被他人截獲那么就顯而易見的將信息泄露掉。相反如果小王根據一個密碼本將信的內容加密,比如每一個漢字對應一個編碼,那么即使被別人截獲,因為沒有密碼本那么信息也不會泄露,小王的妻子拿到加密后的信件后,用密碼本再一一翻譯成可讀的文本,這個過程就是解密。

二、什么是加/解密算法

加密/解密過程中,使用到的算法就是加密/解密算法。

三、加/解密算法的分類

根據加/解密過程是否可逆,算法可以分為可逆加密算法和不可逆加密算法
可逆算法包括:DES、3DES、AES、RSA、DSA
不可逆加密算法包括:SHA-1、MD5
對于可逆加密,如果沒有秘鑰,任何人拿到了密文后通過對應的可逆算法都可以解密,這是不安全的。所以引入了秘鑰,加密的時候加入了秘鑰,接收方解密時需提供秘鑰,這樣不知道秘鑰就無法解密。
根據加解密使用的秘鑰是否相同,算法可以分為對稱加密算法和非對稱加密算法
對稱加解密使用的秘鑰是一致的,非對稱加解密使用的秘鑰是不一致的。

四、不可逆算法

4.1 MD5加密算法

MD5 用的是哈希函數。嚴格來說,MD5不是一種加密算法而是摘要算法。無論是多長的輸入,MD5 都會輸出長度為 128bits 的一個串 (通常用 16 進制 表示為 32 個字符)。完整的md5一般是32位,國內常見的一種是動網的16位(也就是只取32位md5的中間16位),另外有一種是變化過的md5,特征是全是數字,長度可能是20位或者19。

它的典型應用是對一段信息產生信息摘要,以 防止被篡改。
防止被篡改的意思是,發送方用此算法對一段信息產生一個摘要串,接收方也用此算法產生一個摘要串,然后比較這兩個摘要串的內容是否一致,如果不一致我們就認為此信息在傳輸的過程中可能發生了篡改。
那么有沒有可能我修改了信息內容,修改后的內容產生的md5與修改之前是一致的呢?md5防止篡改的關鍵在于,它的碰撞算法以前一直沒有找到,所謂碰撞算法,就是修改原來的文件,同時保持修改后的文件和原文件md5一致。
不過后來,我國山東大學的楊教授搞定了碰撞算法。所以md5作為防篡改,已經不可靠了。類似的,sha1的碰撞算法,最近也被攻克。

public static String getMd5(String source) throws NoSuchAlgorithmException {//1.獲取MessageDigest對象MessageDigest digest = MessageDigest.getInstance("md5");//2.執行加密操作byte[] bytes = source.getBytes();//在MD5算法這,得到的目標字節數組的特點:長度固定為16byte[] targetBytes = digest.digest(bytes);//3.聲明字符數組char [] characters = new char[]{'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};//4.遍歷targetBytesStringBuilder builder = new StringBuilder();for (byte b : targetBytes) {//5.取出b的高四位的值//先把高四位通過右移操作拽到低四位int high = (b >> 4) & 15;//6.取出b的低四位的值int low = b & 15;//7.以high為下標從characters中取出對應的十六進制字符char highChar = characters[high];//8.以low為下標從characters中取出對應的十六進制字符char lowChar = characters[low];builder.append(highChar).append(lowChar);}return builder.toString();}

4.2 SHA-1加密算法

SHA1?是和 MD5 一樣流行的 消息摘要算法,然而 SHA1 比 MD5 的 安全性更強。對于長度小于 2 ^ 64 位的消息,SHA1 會產生一個 160 位(40個字符)的 消息摘要。基于 MD5、SHA1 的信息摘要特性以及 不可逆 (一般而言),可以被應用在檢查 文件完整性 以及 數字簽名 等場景。

public static String shaEncode(String inStr) throws Exception {MessageDigest sha = null;try {sha = MessageDigest.getInstance("SHA");} catch (Exception e) {System.out.println(e.toString());e.printStackTrace();return "";}byte[] byteArray = inStr.getBytes("UTF-8");byte[] md5Bytes = sha.digest(byteArray);StringBuffer hexValue = new StringBuffer();for (int i = 0; i < md5Bytes.length; i++) {int val = ((int) md5Bytes[i]) & 0xff;if (val < 16) {hexValue.append("0");}hexValue.append(Integer.toHexString(val));}return hexValue.toString();}

五、對稱加密算法

5.1 DES算法

DES(Data Encryption Standard)是一種分組密碼算法,明文按 64 位進行分組,密鑰長 64 位,密鑰事實上是 56 位參與 DES 運算(第8、16、24、32、40、48、56、64 位是校驗位)分組后的明文組和 56 位的密鑰按位替代或交換的方法形成密文組,之后按照順序將密文組連在一起,各段數據之間互不影響。標準的DES密鑰長度為64bit,即8個字符,超過8個字符則舍棄后面。比如:用abcdefgh與abcdefghi加密是一樣的結果。又因為有校驗位的存在,所以用12345678與13345678進行加密是一樣的。
如果密鑰長度不足,會以指定的填充方式( 比如PKCS7Padding )方式補足位
關于數據補位參考:https://www.cnblogs.com/Lawson/archive/2012/05/20/2510781.html
因此,破譯 DES 加密算法實際上就是 搜索密鑰的編碼。對于56 位長度的密鑰 來說,如果用窮舉法來進行搜索的話,其運算次數為 2 ^ 56 次=非常大的一個數。
des原理描述
https://blog.csdn.net/qq_32445015/article/details/80184954

package com.inspur.incloudmanager.controller.util;import javax.crypto.Cipher; import javax.crypto.CipherInputStream; import javax.crypto.SecretKeyFactory; import javax.crypto.spec.DESKeySpec; import javax.crypto.spec.IvParameterSpec; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.InputStream; import java.io.OutputStream; import java.security.Key; import java.util.Base64;public class DESUtil {/*** 偏移變量,固定占8位字節*/private final static String IV_PARAMETER = "12345678";/*** 密鑰算法*/private static final String ALGORITHM = "DES";/*** 加密/解密算法-工作模式-填充模式*/ // private static final String CIPHER_ALGORITHM = "DES/CBC/PKCS5Padding";private static final String CIPHER_ALGORITHM = "DES/ECB/PKCS5Padding";/*** 默認編碼*/private static final String CHARSET = "utf-8";/*** 生成key** @param password* @return* @throws Exception*/private static Key generateKey(String password) throws Exception {DESKeySpec dks = new DESKeySpec(password.getBytes(CHARSET));SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(ALGORITHM);return keyFactory.generateSecret(dks);}/*** DES加密字符串** @param password 加密密碼,長度不能夠小于8位* @param data 待加密字符串* @return 加密后內容*/public static String encrypt(String password, String data) {if (password== null || password.length() < 8) {throw new RuntimeException("加密失敗,key不能小于8位");}if (data == null)return null;try {Key secretKey = generateKey(password);Cipher cipher = Cipher.getInstance(CIPHER_ALGORITHM);IvParameterSpec iv = new IvParameterSpec(IV_PARAMETER.getBytes(CHARSET));//非ECB模式使用下面的偏移量 // cipher.init(Cipher.ENCRYPT_MODE, secretKey, iv);//ECB模式cipher.init(Cipher.ENCRYPT_MODE, secretKey);byte[] bytes = cipher.doFinal(data.getBytes(CHARSET));//JDK1.8及以上可直接使用Base64,JDK1.7及以下可以使用BASE64Encoder//Android平臺可以使用android.util.Base64return new String(Base64.getEncoder().encode(bytes));} catch (Exception e) {e.printStackTrace();return data;}}/*** DES解密字符串** @param password 解密密碼,長度不能夠小于8位* @param data 待解密字符串* @return 解密后內容*/public static String decrypt(String password, String data) {if (password== null || password.length() < 8) {throw new RuntimeException("加密失敗,key不能小于8位");}if (data == null)return null;try {Key secretKey = generateKey(password);Cipher cipher = Cipher.getInstance(CIPHER_ALGORITHM);IvParameterSpec iv = new IvParameterSpec(IV_PARAMETER.getBytes(CHARSET));//非ECB模式使用下面的偏移量 // cipher.init(Cipher.DECRYPT_MODE, secretKey, iv);cipher.init(Cipher.DECRYPT_MODE, secretKey);return new String(cipher.doFinal(Base64.getDecoder().decode(data.getBytes(CHARSET))), CHARSET);} catch (Exception e) {e.printStackTrace();return data;}} }
  • ?

5.2 3DES算法

3DES(又叫Triple DES)是三重數據加密算法(TDEA,Triple Data Encryption Algorithm)塊密碼的通稱。它相當于是對每個數據塊應用三次DES加密算法。密鑰長度是128位,192位(bit),如果密碼位數少于等于64位,加密結果與DES相同。原版DES容易被破解,新的3DES出現,增加了加密安全性,避免被暴力破解。它同樣是對稱性加密,同樣涉及到加密編碼方式,及填充方式。包括3DES-ECB,3DES-CBC,3DES-CTR,3DES-OFB,3DES-CFB

public static String threedesencrypt(String key,String text) {try {byte[] src = text.getBytes();DESedeKeySpec spec = new DESedeKeySpec(convert(key.getBytes()));SecretKeyFactory factory = SecretKeyFactory.getInstance("DESede");SecretKey secretKey = factory.generateSecret(spec);Cipher cipher = Cipher.getInstance("DESede/ECB/PKCS5Padding");cipher.init(Cipher.ENCRYPT_MODE, secretKey);byte[] res = cipher.doFinal(src);//encodeBase64會對字符串3位一組自動補全,因而最后可能會出現 == 或者 =return new String(Base64.getEncoder().encode(res), "utf-8");} catch (Exception e) {System.out.println("error");}return null;}/*** 不足24位進行補位* @param sources* @return*/private static byte[] convert(byte[] sources){byte[] ret = new byte[24];if(sources.length < 24){for(int i = 0; i < 24;i++){if(i < sources.length){ret[i] = sources[i];}else{ret[i] = 0;}}}else{ret = sources;}return ret;}
  • ?

5.3 AES算法

高級加密標準(英語:Advanced Encryption Standard,縮寫:AES),是一種區塊加密標準。這個標準用來替代原先的DES,已經被多方分析且廣為全世界所使用。
那么為什么原來的DES會被取代呢,原因就在于其使用56位密鑰,比較容易被破解。而AES可以使用128、192、和256位密鑰,并且用128位分組加密和解密數據,相對來說安全很多。完善的加密算法在理論上是無法破解的,除非使用窮盡法。使用窮盡法破解密鑰長度在128位以上的加密數據是不現實的,僅存在理論上的可能性。統計顯示,即使使用目前世界上運算速度最快的計算機,窮盡128位密鑰也要花上幾十億年的時間,更不用說去破解采用256位密鑰長度的AES算法了。

package com.inspur.incloudmanager.controller.util;import org.springframework.util.Base64Utils;import javax.crypto.Cipher; import javax.crypto.KeyGenerator; import javax.crypto.SecretKey; import javax.crypto.spec.SecretKeySpec; import java.security.NoSuchAlgorithmException; import java.security.SecureRandom; import java.util.logging.Level; import java.util.logging.Logger;public class AESUtil{private static final String KEY_ALGORITHM = "AES";private static final String DEFAULT_CIPHER_ALGORITHM = "AES/ECB/PKCS5Padding";//默認的加密算法/*** AES 加密操作** @param content 待加密內容* @param key 加密密鑰* @return 返回Base64轉碼后的加密數據*/public static String encrypt(String content, String key) {try {Cipher cipher = Cipher.getInstance(DEFAULT_CIPHER_ALGORITHM);// 創建密碼器byte[] byteContent = content.getBytes("utf-8");cipher.init(Cipher.ENCRYPT_MODE, getSecretKey(key));// 初始化為加密模式的密碼器byte[] result = cipher.doFinal(byteContent);// 加密return Base64Utils.encodeToString(result);//通過Base64轉碼返回} catch (Exception ex) {Logger.getLogger(AESUtil.class.getName()).log(Level.SEVERE, null, ex);}return null;}/*** AES 解密操作** @param content* @param key* @return*/public static String decrypt(String content, String key) {try {//實例化Cipher cipher = Cipher.getInstance(DEFAULT_CIPHER_ALGORITHM);//使用密鑰初始化,設置為解密模式cipher.init(Cipher.DECRYPT_MODE, getSecretKey(key));//執行操作byte[] result = cipher.doFinal(Base64Utils.decodeFromString(content));return new String(result, "utf-8");} catch (Exception ex) {Logger.getLogger(AESUtil.class.getName()).log(Level.SEVERE, null, ex);}return null;}/*** 生成加密秘鑰** @return*/private static SecretKeySpec getSecretKey(final String key) {//返回生成指定算法密鑰生成器的 KeyGenerator 對象KeyGenerator kg = null;try {kg = KeyGenerator.getInstance(KEY_ALGORITHM);//AES 要求密鑰長度為 128kg.init(128, new SecureRandom(key.getBytes()));//生成一個密鑰SecretKey secretKey = kg.generateKey();return new SecretKeySpec(secretKey.getEncoded(), KEY_ALGORITHM);// 轉換為AES專用密鑰} catch (NoSuchAlgorithmException ex) {Logger.getLogger(AESUtil.class.getName()).log(Level.SEVERE, null, ex);}return null;}public static void main(String[] args) {String content = "Inspur1!";String key = "wang";System.out.println("content:" + content);String s1 = AESUtil.encrypt(content, key);System.out.println("s1:" + s1);System.out.println("s2:"+AESUtil.decrypt(s1, key));}}

指定秘鑰

public class AESUtil{private static final String KEY_ALGORITHM = "AES";private static final String DEFAULT_CIPHER_ALGORITHM = "AES/ECB/PKCS5Padding";//默認的加密算法/*** AES 加密操作** @param content 待加密內容* @param key 加密密鑰* @return 返回Base64轉碼后的加密數據*/public static String encrypt(String content, String key) {try {Cipher cipher = Cipher.getInstance(DEFAULT_CIPHER_ALGORITHM);// 創建密碼器byte[] byteContent = content.getBytes("utf-8");SecretKeySpec aeskey = new SecretKeySpec(convert(key.getBytes("utf-8")), "AES");cipher.init(Cipher.ENCRYPT_MODE, aeskey);// 初始化為加密模式的密碼器byte[] result = cipher.doFinal(byteContent);// 加密return Base64Utils.encodeToString(result);//通過Base64轉碼返回} catch (Exception ex) {Logger.getLogger(AESUtil.class.getName()).log(Level.SEVERE, null, ex);}return null;}/*** AES 解密操作** @param content* @param key* @return*/public static String decrypt(String content, String key) {try {//實例化Cipher cipher = Cipher.getInstance(DEFAULT_CIPHER_ALGORITHM);SecretKeySpec aeskey = new SecretKeySpec(convert(key.getBytes("UTF-8")), "AES");//使用密鑰初始化,設置為解密模式cipher.init(Cipher.DECRYPT_MODE, aeskey);//執行操作byte[] result = cipher.doFinal(Base64Utils.decodeFromString(content));return new String(result, "utf-8");} catch (Exception ex) {Logger.getLogger(AESUtil.class.getName()).log(Level.SEVERE, null, ex);}return null;}/*** 截取算法,超過128位(32字節),手動截取掉* @param sources* @return*/private static byte[] convert(byte[] sources){byte[] ret = new byte[32];if(sources.length > 32){for(int i = 0; i < 32;i++){ret[i] = sources[i];}}else{ret = sources;}return ret;}public static void main(String[] args) {String content = "Inspur1!";String key = "inclouqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq";System.out.println("content:" + content);String s1 = AESUtil.encrypt(content, key);System.out.println("s1:" + s1);System.out.println("s2:"+AESUtil.decrypt(s1, key));} }
  • ?

六、非對稱加密算法

6.1 RSA算法

import javax.crypto.Cipher; import java.security.*; import java.security.spec.PKCS8EncodedKeySpec; import java.security.spec.X509EncodedKeySpec; import java.util.Base64;/*** RSA非對稱加密算法工具類** @author lixk*/public class RSA {//非對稱密鑰算法private static final String KEY_ALGORITHM = "RSA";//密鑰長度,在512到65536位之間,建議不要太長,否則速度很慢,生成的加密數據很長private static final int KEY_SIZE = 512;//字符編碼private static final String CHARSET = "UTF-8";/*** 生成密鑰對** @return KeyPair 密鑰對*/public static KeyPair getKeyPair() throws Exception {return getKeyPair(null);}/*** 生成密鑰對* @param password 生成密鑰對的密碼* @return* @throws Exception*/public static KeyPair getKeyPair(String password) throws Exception {//實例化密鑰生成器KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance(KEY_ALGORITHM);//初始化密鑰生成器if(password == null){keyPairGenerator.initialize(KEY_SIZE);}else {SecureRandom secureRandom = SecureRandom.getInstance("SHA1PRNG");secureRandom.setSeed(password.getBytes(CHARSET));keyPairGenerator.initialize(KEY_SIZE, secureRandom);}//生成密鑰對return keyPairGenerator.generateKeyPair();}/*** 取得私鑰** @param keyPair 密鑰對* @return byte[] 私鑰*/public static byte[] getPrivateKeyBytes(KeyPair keyPair) {return keyPair.getPrivate().getEncoded();}/*** 取得Base64編碼的私鑰** @param keyPair 密鑰對* @return String Base64編碼的私鑰*/public static String getPrivateKey(KeyPair keyPair) {return Base64.getEncoder().encodeToString(getPrivateKeyBytes(keyPair));}/*** 取得公鑰** @param keyPair 密鑰對* @return byte[] 公鑰*/public static byte[] getPublicKeyBytes(KeyPair keyPair) {return keyPair.getPublic().getEncoded();}/*** 取得Base64編碼的公鑰** @param keyPair 密鑰對* @return String Base64編碼的公鑰*/public static String getPublicKey(KeyPair keyPair) {return Base64.getEncoder().encodeToString(getPublicKeyBytes(keyPair));}/*** 私鑰加密** @param data 待加密數據* @param privateKey 私鑰字節數組* @return byte[] 加密數據*/public static byte[] encryptByPrivateKey(byte[] data, byte[] privateKey) throws Exception {//實例化密鑰工廠KeyFactory keyFactory = KeyFactory.getInstance(KEY_ALGORITHM);//生成私鑰PrivateKey key = keyFactory.generatePrivate(new PKCS8EncodedKeySpec(privateKey));//數據加密Cipher cipher = Cipher.getInstance(KEY_ALGORITHM);cipher.init(Cipher.ENCRYPT_MODE, key);return cipher.doFinal(data);}/*** 私鑰加密** @param data 待加密數據* @param privateKey Base64編碼的私鑰* @return String Base64編碼的加密數據*/public static String encryptByPrivateKey(String data, String privateKey) throws Exception {byte[] key = Base64.getDecoder().decode(privateKey);return Base64.getEncoder().encodeToString(encryptByPrivateKey(data.getBytes(CHARSET), key));}/*** 公鑰加密** @param data 待加密數據* @param publicKey 公鑰字節數組* @return byte[] 加密數據*/public static byte[] encryptByPublicKey(byte[] data, byte[] publicKey) throws Exception {//實例化密鑰工廠KeyFactory keyFactory = KeyFactory.getInstance(KEY_ALGORITHM);//生成公鑰PublicKey key = keyFactory.generatePublic(new X509EncodedKeySpec(publicKey));//數據加密Cipher cipher = Cipher.getInstance(KEY_ALGORITHM);cipher.init(Cipher.ENCRYPT_MODE, key);return cipher.doFinal(data);}/*** 公鑰加密** @param data 待加密數據* @param publicKey Base64編碼的公鑰* @return String Base64編碼的加密數據*/public static String encryptByPublicKey(String data, String publicKey) throws Exception {byte[] key = Base64.getDecoder().decode(publicKey);return Base64.getEncoder().encodeToString(encryptByPublicKey(data.getBytes(CHARSET), key));}/*** 私鑰解密** @param data 待解密數據* @param privateKey 私鑰字節數組* @return byte[] 解密數據*/public static byte[] decryptByPrivateKey(byte[] data, byte[] privateKey) throws Exception {//實例化密鑰工廠KeyFactory keyFactory = KeyFactory.getInstance(KEY_ALGORITHM);//生成私鑰PrivateKey key = keyFactory.generatePrivate(new PKCS8EncodedKeySpec(privateKey));//數據解密Cipher cipher = Cipher.getInstance(KEY_ALGORITHM);cipher.init(Cipher.DECRYPT_MODE, key);return cipher.doFinal(data);}/*** 私鑰解密** @param data Base64編碼的待解密數據* @param privateKey Base64編碼的私鑰* @return String 解密數據*/public static String decryptByPrivateKey(String data, String privateKey) throws Exception {byte[] key = Base64.getDecoder().decode(privateKey);return new String(decryptByPrivateKey(Base64.getDecoder().decode(data), key), CHARSET);}/*** 公鑰解密** @param data 待解密數據* @param publicKey 公鑰字節數組* @return byte[] 解密數據*/public static byte[] decryptByPublicKey(byte[] data, byte[] publicKey) throws Exception {//實例化密鑰工廠KeyFactory keyFactory = KeyFactory.getInstance(KEY_ALGORITHM);//產生公鑰PublicKey key = keyFactory.generatePublic(new X509EncodedKeySpec(publicKey));//數據解密Cipher cipher = Cipher.getInstance(KEY_ALGORITHM);cipher.init(Cipher.DECRYPT_MODE, key);return cipher.doFinal(data);}/*** 公鑰解密** @param data Base64編碼的待解密數據* @param publicKey Base64編碼的公鑰* @return String 解密數據*/public static String decryptByPublicKey(String data, String publicKey) throws Exception {byte[] key = Base64.getDecoder().decode(publicKey);return new String(decryptByPublicKey(Base64.getDecoder().decode(data), key), CHARSET);}/*** 測試加解密方法** @param args* @throws Exception*/public static void main(String[] args) throws Exception {//生成密鑰對,一般生成之后可以放到配置文件中KeyPair keyPair = RSA.getKeyPair();//公鑰String publicKey = RSA.getPublicKey(keyPair);//私鑰String privateKey = RSA.getPrivateKey(keyPair);System.out.println("公鑰:\n" + publicKey);System.out.println("私鑰:\n" + privateKey);String data = "RSA 加解密測試!";{System.out.println("\n===========私鑰加密,公鑰解密==============");String s1 = RSA.encryptByPrivateKey(data, privateKey);System.out.println("加密后的數據:" + s1);String s2 = RSA.decryptByPublicKey(s1, publicKey);System.out.println("解密后的數據:" + s2 + "\n\n");}{System.out.println("\n===========公鑰加密,私鑰解密==============");String s1 = RSA.encryptByPublicKey(data, publicKey);System.out.println("加密后的數據:" + s1);String s2 = RSA.decryptByPrivateKey(s1, privateKey);System.out.println("解密后的數據:" + s2 + "\n\n");}} }

聲明:本文章主要將幾種常用的加密算法及其java實現統一整理,便于以后查看。大多數是轉載參考網上的內容。如有侵權請告知。
參考文章列表如下:

https://blog.csdn.net/u013314786/article/details/80324461

總結

以上是生活随笔為你收集整理的转:常用的几种加密算法以及java实现的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。