Java常用加密演算法(一)—單向加密演算法(MD5/SHA)
-
MD5加密
MD5以512位分組來處理輸入的資訊,且每一分組又被劃分為16個32位子分組,經過了一系列的處理後,演算法的輸出由四個32位分組組成,將這四個32位分組級聯後將生成一個128位雜湊值。
在MD5演算法中,首先需要對資訊進行填充,使其位長對512求餘的結果等於448。因此,資訊的位長(Bits Length)將被擴充套件至N512+448,N為一個非負整數,N可以是零。填充的方法如下,在資訊的後面填充一個1和無數個0,直到滿足上面的條件時才停止用0對資訊的填充。然後,在這個結果後面附加一個以64位二進位制表示的填充前資訊長度。經過這兩步的處理,資訊的位長=N512+448+64=(N+1)*512,即長度恰好是512的整數倍。這樣做的原因是為滿足後面處理中對資訊長度的要求。
/**
* MD5 加密工具類
* @author mazaiting
*/
public class Md5Util {
/**
* MD5 加密 生成32位MD5碼
* @param source 需要加密的字串
* @return 32位MD5碼
*/
public static String encode(String source) {
try {
// 獲得MD5 訊息摘要
MessageDigest messageDigest = MessageDigest.getInstance("MD5");
// 獲得指定編碼的位元組資料
byte[] sourceBytes = source.getBytes("UTF-8");
// 指定的位元組陣列對摘要執行最終更新
byte[] digestBytes = messageDigest.digest(sourceBytes);
StringBuffer hexValue = new StringBuffer();
for (int i = 0; i < digestBytes.length; i++) {
int val = (digestBytes[i] & 0xff);
if (val < 16){
hexValue.append("0");
}
hexValue.append(Integer.toHexString(val));
}
return hexValue.toString();
} catch (NoSuchAlgorithmException e) {
return null;// 獲得MD5 訊息摘要異常
} catch (UnsupportedEncodingException e) {
return null;// 獲得指定編碼的位元組資料異常
}
}
}
- SHA
SHA是一種資料加密演算法,該演算法經過加密專家多年來的發展和改進已日益完善,現在已成為公認的最安全的雜湊演算法之一,並被廣泛使用。該演算法的思想是接收一段明文,然後以一種不可逆的方式將它轉換成一段(通常更小)密文,也可以簡單的理解為取一串輸入碼(稱為預對映或資訊),並把它們轉化為長度較短、位數固定的輸出序列即雜湊值(也稱為資訊摘要或資訊認證程式碼)的過程。雜湊函式值可以說是對明文的一種“指紋”或是“摘要”所以對雜湊值的數字簽名就可以視為對此明文的數字簽名。
安全雜湊演算法SHA(Secure Hash Algorithm,SHA)是美國國家標準技術研究所釋出的國家標準FIPS PUB 180,最新的標準已經於2008年更新到FIPS PUB 180-3。其中規定了SHA-1,SHA-224,SHA-256,SHA-384,和SHA-512這幾種單向雜湊演算法。SHA-1,SHA-224和SHA-256適用於長度不超過264二進位制位的訊息。SHA-384和SHA-512適用於長度不超過2128二進位制位的訊息。
/**
* 採用SHA 加密
* @author mazaiting
*/
public class SHAUtil {
/**
* SHA 加密 生成40位SHA碼
* @param source 待加密字串
* @return 返回40位SHA碼
*/
public static String encode(String source) {
try {
// 獲取SHA的訊息摘要
MessageDigest messageDigest = MessageDigest.getInstance("SHA");
// 獲取指定編碼的字串位元組陣列
byte[] sourceBytes = source.getBytes("UTF-8");
// 對指定位元組資料進行更新
byte[] digestBytes = messageDigest.digest(sourceBytes);
StringBuffer hexValue = new StringBuffer();
for (int i = 0; i < digestBytes.length; i++) {
int val = (digestBytes[i] & 0xff);
if (val < 16) {
hexValue.append("0");
}
hexValue.append(Integer.toHexString(val));
}
return hexValue.toString();
} catch (NoSuchAlgorithmException e) {
return null;// 獲取SHA的訊息摘要異常
} catch (UnsupportedEncodingException e) {
return null;// 獲取指定編碼的字串位元組陣列失敗
}
}
}
相關文章
- SHA加密演算法加密演算法
- 加密演算法原理分析(MD5、SHA-256)加密演算法
- 加密演算法比較:SHA1,SHA256,MD5加密演算法
- 一文搞懂單向雜湊加密:MD5、SHA-1、SHA-2、SHA-3加密
- MD5加密演算法加密演算法
- Java 常用加密解密演算法Java加密解密演算法
- 【Java】SHA加密Java加密
- 常用加密演算法加密演算法
- MD5雜湊加密演算法加密演算法
- JavaScript實現的base64加密、md5加密、sha1加密及AES加密JavaScript加密
- Java實現密碼、檔案MD5加密,密碼sha256、sha384、sha512Hex等加密Java密碼加密
- MD5加密演算法簡介 (轉)加密演算法
- java MD5 加密Java加密
- 【Java】MD5加密Java加密
- java md5加密Java加密
- 那些常用的加密演算法加密演算法
- 加密測試-SHA加密加密
- 常用加密解密演算法【RSA、AES、DES、MD5】介紹和使用加密解密演算法
- Java實現常用加密演算法-SM4Java加密演算法
- 加密演算法(一)加密演算法
- LoadRunner中呼叫SHA1演算法加密字串演算法加密字串
- iOS 加密 base64 sha1 MD5 RSAiOS加密
- MD5Util (MD5加密摘要演算法)。加密演算法
- 一種基於Md5演算法的改進加密方法演算法加密
- Android資料加密之SHA安全雜湊演算法Android加密演算法
- Blowfish 加密演算法 Java 版簡單實現加密演算法Java
- 各種Java加密演算法Java加密演算法
- Java中Blowfish加密演算法Java加密演算法
- 對稱加密演算法----DES加密演算法加密演算法
- java MD5 加密實現Java加密
- 加密演算法加密演算法
- Java安全之安全加密演算法Java加密演算法
- Java 常用的 4 種加密方式(MD5+Base64+SHA+BCrypt)Java加密
- JAVA中MD5加密(MD5工具類)Java加密
- 昔日的加密英雄:MD5演算法不安全(轉)加密演算法
- 程式設計中常用的加密演算法程式設計加密演算法
- C/C++ 常用加密與解密演算法C++加密解密演算法
- 面試官:說一下你常用的加密演算法面試加密演算法