Java加密方式有多種,包括對稱加密、非對稱加密、散列加密等。
1. 對稱加密:
對稱加密是指加密和解密使用相同密鑰的加密方式。在Java中,常見的對稱加密演算法有AES、DES、3DES等。其中,AES演算法是DES的替代品,具有更高的安全性。這些演算法提供了不同級別的加密強度,適用於保護敏感信息。
2. 非對稱加密:
非對稱加密使用一對密鑰,一個用於加密,另一個用於解密。在Java中,常見的非對稱加密演算法有RSA、DSA、ECC等。RSA演算法是最常用的非對稱加密演算法之一,它利用公鑰進行加密,私鑰進行解密,適用於安全通信和數字簽名。
3. 散列加密(哈希加密):
散列加密是一種將任意長度的輸入轉換為固定長度輸出的加密方式。在Java中,常見的散列加密演算法有MD5、SHA-1、SHA-256等。這些演算法主要用於生成數據的唯一標識符(哈希值),適用於密碼存儲、文件校驗等場景。需要注意的是,雖然MD5在某些情況下存在安全隱患,但SHA系列演算法提供了更高的安全性。
以上三種加密方式在Java中都有廣泛的應用,根據具體需求選擇合適的加密方式至關重要。同時,為了確保加密的安全性,還需要注意密鑰的管理和保護,避免密鑰泄露帶來的安全風險。
2. JavaMD5和SHA256等常用加密演算法
前言我們在做java項目開發的時候,在前後端介面分離模式下,介面信息需要加密處理,做簽名認證,還有在用戶登錄信息密碼等也都需要數據加密。信息加密是現在幾乎所有項目都需要用到的技術,身份認證、單點登陸、信息通訊、支付交易等場景中經常會需要用到加密演算法,所謂加密演算法,就是將原本的明文通過一系列演算法操作變成密文。
BASE嚴格地說,屬於編碼格式,而非加密演算法MD(MessageDigestalgorithm,信息摘要演算法)SHA(SecureHashAlgorithm,安全散列演算法)HMAC(HashMessageAuthenticationCode,散列消息鑒別碼)
加密演算法中SHA1、SHA-224、SHA-256、SHA-384,和SHA-512,其中SHA-224、SHA-256、SHA-384,和SHA-512我們可以統稱為SHA2加密演算法
SHA加密演算法的安全性要比MD5更高,而SHA2加密演算法比SHA1的要高。其中SHA後面的數字表示的是加密後的字元串長度,SHA1默認會產生一個160位的信息摘要。
MD5MD5信息摘要演算法(英語:MD5Message-DigestAlgorithm),一種被廣泛使用的密碼散列函數,可以產生出一個128位(16位元組)的散列值(hashvalue),用於確保信息傳輸完整一致。
MD5演算法有以下特點:
壓縮性:無論數據長度是多少,計算出來的MD5值長度相同
容易計算性:由原數據容易計算出MD5值
抗修改性:即便修改一個位元組,計算出來的MD5值也會巨大差異
抗碰撞性:知道數據和MD5值,很小概率找到相同MD5值相同的原數據
准確來講,MD5不是一種加密演算法,而是一種摘要演算法,MD5能將明文輸出為128bits的字元串,這個字元串是無法再被轉換成明文的。網上一些MD5解密網站也只是保存了一些字元串對應的md5串,通過已經記錄的md5串來找出原文。
我做過的幾個項目中經常見到MD5用在加密上的場景。比如對密碼的加密,生成一個密碼後,使用MD5生成一個128位字元串保存在資料庫中,用戶輸入密碼後也先生成MD5串,再去資料庫里比較。因此我們在找回密碼時是無法得到原來的密碼的,因為明文密碼根本不會被保存。
SHA系列安全散列演算法(英語:SecureHashAlgorithm,縮寫為SHA)是一個密碼散列函數家族,是FIPS所認證的安全散列演算法。能計算出一個數字消息所對應到的,長度固定的字元串(又稱消息摘要)的演算法。且若輸入的消息不同,它們對應到不同字元串的機率很高。
2005年8月17日的CRYPTO會議尾聲中王小雲、姚期智、姚儲楓再度發表更有效率的SHA-1攻擊法,能在2的63次方個計算復雜度內找到碰撞。
也就是說SHA-1加密演算法有碰撞的可能性,雖然很小。
HMACHMAC是密鑰相關的哈希運算消息認證碼(Hash-)的縮寫,由H.Krawezyk,M.Bellare,R.Canetti於1996年提出的一種基於Hash函數和密鑰進行消息認證的方法,並於1997年作為RFC2104被公布,並在IPSec和其他網路協議(如SSL)中得以廣泛應用,現在已經成為事實上的Internet安全標准。它可以與任何迭代散列函數捆綁使用。
HMAC演算法更像是一種加密演算法,它引入了密鑰,其安全性已經不完全依賴於所使用的Hash演算法
如果要使用加密,推薦使用SHA256、SHA384、SHA512以及HMAC-SHA256、HMAC-SHA384、HMAC-SHA512這幾種演算法。
對稱加密演算法對稱加密演算法是應用比較早的演算法,在數據加密和解密的時用的都是同一個密鑰,這就造成了密鑰管理困難的問題。常見的對稱加密演算法有DES、3DES、AES128、AES192、AES256(默認安裝的JDK尚不支持AES256,需要安裝對應的jce補丁進行升級jce1.7,jce1.8)。其中AES後面的數字代表的是密鑰長度。對稱加密演算法的安全性相對較低,比較適用的場景就是內網環境中的加解密。
所謂對稱加密,就是通過密鑰加密後可以再通過密鑰解密。我接觸過的某個國企現在內部就是採用AES的方式實現集成登陸。第三方系統提供一個接收用戶信息的介面,該國企將用戶信息AES加密後通過這個介面傳遞給第三方系統,第三方系統自行實現登陸操作。這里需要注意的是密鑰十分重要,如果密鑰丟失,就有信息泄漏的風險。
加密鹽加密鹽也是比較常聽到的一個概念,鹽就是一個隨機字元串用來和我們的加密串拼接後進行加密。
加鹽主要是為了提供加密字元串的安全性。假如有一個加鹽後的加密串,黑客通過一定手段這個加密串,他拿到的明文,並不是我們加密前的字元串,而是加密前的字元串和鹽組合的字元串,這樣相對來說又增加了字元串的安全性。
在線加密網站站長工具
在線加密
總結比較推薦的幾個加密演算法有:
不可逆加密:SHA256、SHA384、SHA512以及HMAC-SHA256、HMAC-SHA384、HMAC-SHA512
對稱加密演算法:AES、3DES
非對稱加密演算法:RSA
參考常用的加密演算法
淺析五種最常用的Java加密演算法
https://juejin.cn/post/6844903638117122056#heading-3
3. 用java做數字加密,思路如下:輸入一個四位數,每位相加,1~9分別代表ASC中的a~i
import java.util.Scanner;
public class Encpryt {
public Encpryt() {
Scanner scan = new Scanner(System.in);
System.out.println("輸入一個四位數:");
String str = scan.next();
while(str != "q"){
if (str.length()!=4) {
System.out.println("您輸入的不是4位的數字請重新輸入");
str = scan.next();
continue;
}
System.out.println("加密後的數是:");
char[] ns = new char[4];
for(int i = 0; i < 4; i++){
ns[i] = str.charAt(i);
System.out.println(ns[i] -'0' + 'a' - 1);
}
System.out.println("輸入一個四位數:");
str = scan.next();
}
}
/** * @param args
*/
public static void main(String[] args) {
new Encpryt();
}
}
4. java最常用的幾種加密演算法
簡單的Java加密演算法有:
第一種. BASE
Base是網路上最常見的用於傳輸Bit位元組代碼的編碼方式之一,大家可以查看RFC~RFC,上面有MIME的詳細規范。Base編碼可用於在HTTP環境下傳遞較長的標識信息。例如,在Java Persistence系統Hibernate中,就採用了Base來將一個較長的唯一標識符(一般為-bit的UUID)編碼為一個字元串,用作HTTP表單和HTTP GET URL中的參數。在其他應用程序中,也常常需要把二進制數據編碼為適合放在URL(包括隱藏表單域)中的形式。此時,採用Base編碼具有不可讀性,即所編碼的數據不會被人用肉眼所直接看到。
第二種. MD
MD即Message-Digest Algorithm (信息-摘要演算法),用於確保信息傳輸完整一致。是計算機廣泛使用的雜湊演算法之一(又譯摘要演算法、哈希演算法),主流編程語言普遍已有MD實現。將數據(如漢字)運算為另一固定長度值,是雜湊演算法的基礎原理,MD的前身有MD、MD和MD。
MD演算法具有以下特點:
壓縮性:任意長度的數據,算出的MD值長度都是固定的。
容易計算:從原數據計算出MD值很容易。
抗修改性:對原數據進行任何改動,哪怕只修改個位元組,所得到的MD值都有很大區別。
弱抗碰撞:已知原數據和其MD值,想找到一個具有相同MD值的數據(即偽造數據)是非常困難的。
強抗碰撞:想找到兩個不同的數據,使它們具有相同的MD值,是非常困難的。
MD的作用是讓大容量信息在用數字簽名軟體簽署私人密鑰前被」壓縮」成一種保密的格式(就是把一個任意長度的位元組串變換成一定長的十六進制數字串)。除了MD以外,其中比較有名的還有sha-、RIPEMD以及Haval等。
第三種.SHA
安全哈希演算法(Secure Hash Algorithm)主要適用於數字簽名標准(Digital Signature Standard DSS)裡面定義的數字簽名演算法(Digital Signature Algorithm DSA)。對於長度小於^位的消息,SHA會產生一個位的消息摘要。該演算法經過加密專家多年來的發展和改進已日益完善,並被廣泛使用。該演算法的思想是接收一段明文,然後以一種不可逆的方式將它轉換成一段(通常更小)密文,也可以簡單的理解為取一串輸入碼(稱為預映射或信息),並把它們轉化為長度較短、位數固定的輸出序列即散列值(也稱為信息摘要或信息認證代碼)的過程。散列函數值可以說是對明文的一種「指紋」或是「摘要」所以對散列值的數字簽名就可以視為對此明文的數字簽名。
SHA-與MD的比較
因為二者均由MD導出,SHA-和MD彼此很相似。相應的,他們的強度和其他特性也是相似,但還有以下幾點不同:
對強行攻擊的安全性:最顯著和最重要的區別是SHA-摘要比MD摘要長 位。使用強行技術,產生任何一個報文使其摘要等於給定報摘要的難度對MD是^數量級的操作,而對SHA-則是^數量級的操作。這樣,SHA-對強行攻擊有更大的強度。
對密碼分析的安全性:由於MD的設計,易受密碼分析的攻擊,SHA-顯得不易受這樣的攻擊。
速度:在相同的硬體上,SHA-的運行速度比MD慢。
第四種.HMAC
HMAC(Hash Message Authentication Code,散列消息鑒別碼,基於密鑰的Hash演算法的認證協議。消息鑒別碼實現鑒別的原理是,用公開函數和密鑰產生一個固定長度的值作為認證標識,用這個標識鑒別消息的完整性。使用一個密鑰生成一個固定大小的小數據塊,即MAC,並將其加入到消息中,然後傳輸。接收方利用與發送方共享的密鑰進行鑒別認證等。
5. Java MD5和SHA256等常用加密演算法
在Java項目開發中,數據安全是至關重要的。特別是在前後端介面交互時,為了保護信息的完整性和安全性,我們需要對介面簽名、用戶登錄密碼等進行加密處理。加密演算法作為基礎技術,在身份驗證、單點登錄、信息通信和支付交易等多個場景中扮演著關鍵角色。
MD5,全稱信息摘要演算法,是一種常見的128位(16位元組)散列函數。它通過復雜的演算法操作,將明文轉化為無法還原的密文,確保信息傳輸的一致性。盡管MD5常用於密碼的存儲,但需注意,由於其本質上是摘要而非加密,生成的128位字元串是單向的,無法逆向獲取原始信息。在找回密碼時,我們只能通過對比用戶輸入的MD5值來驗證,而無法獲取原密碼。
SHA系列,如SHA-1,盡管有碰撞的潛在風險,但其安全性相對較高,適用於對信息安全要求較高的場景。HMAC(Hash-based Message Authentication Code)是基於哈希函數的認證碼,推薦使用SHA256、SHA384、SHA512以及它們的HMAC變種,如HMAC-SHA256等,以提供更高級別的加密和認證功能。
對於實際應用中的對稱加密演算法,如常見的加密鹽,它可以增強密碼的安全性,防止暴力破解。至於在線加密網站,選擇適合項目的加密演算法至關重要。在眾多演算法中,SHA256、SHA384和SHA512因其較高的安全性,以及HMAC-SHA變種的認證能力,被廣泛認為是更推薦的選擇。