1. 程式人生 > >MD(Message Digest ) 訊息摘要演算法之SHA

MD(Message Digest ) 訊息摘要演算法之SHA

      上一篇文章中介紹了基本的單向加密演算法 — — MD5,也大致的說了說它實現的原理。這篇文章繼續之前提到的單向加密,主要講的是 SHA,同 MD5 一樣,SHA 同樣也是一個系列,它包括 SHA-1,SHA-224,SHA-256,SHA-384,和 SHA-512 等幾種演算法。其中,SHA-1,SHA-224 和 SHA-256 適用於長度不超過 2^64 二進位制位的訊息。SHA-384 和 SHA-512 適用於長度不超過 2^128 二進位制位的訊息。

SHA演算法的基本概念

SHA,全稱為“Secure Hash Algorithm”,中文名“安全雜湊演算法”,主要適用於數字簽名標準(Digital Signature Standard DSS)裡面定義的數字簽名演算法(Digital Signature Algorithm DSA)。對於長度小於 2^64 位的訊息,SHA1 會產生一個 160 位的訊息摘要。       該演算法的思想是接收一段明文,然後以一種不可逆的方式將它轉換成一段(通常更小)密文,也可以簡單的理解為取一串輸入碼(稱為預對映或資訊),並把它們轉化為長度較短、位數固定的輸出序列即雜湊值的過程。 SHA-1 有兩個特點
  • 不可以從訊息摘要中復原資訊
  • 兩個不同的訊息,不會產生同樣的訊息摘要

SHA演算法的種類

     

SHA-1 與 MD5 的比較

因為二者均由 MD4 匯出,SHA-1 和 MD5 彼此很相似。相應的,他們的強度和其他特性也是相似,但還有以下幾點不同:
  • 對強行攻擊的安全性
最顯著和最重要的區別是 SHA-1 摘要比 MD5 摘要長 32 位。使用強行技術,產生任何一個報文使其摘要等於給定報摘要的難度對 MD5 是 2^128 數量級的操作,而對 SHA-1 則是 2^160 數量級的操作。這樣,SHA-1 對強行攻擊有更大的強度。
  • 對密碼分析的安全性
由於 MD5 的設計,易受密碼分析的攻擊,SHA-1 顯得不易受這樣的攻擊。
  • 速度
在相同的硬體上,SHA-1 的執行速度比 MD5 慢。

SHA系列演算法程式設計使用


SHA系列演算法使用程式碼

import java.security.MessageDigest;

public class SHAUtils {
	/**
	 * SHA演算法
	 * 
	 * @param data
	 * @return
	 */
	public static String encryptSHA(byte[] data) {
		try {
			// 判斷資料的合法性
			if (data == null) {
				throw new RuntimeException("資料不能為NULL");
			}
			// 獲取SHA演算法的型別
			MessageDigest sha = MessageDigest.getInstance("SHA-512");
			// 加入資料
			sha.update(data);
			// 獲取訊息摘要
			byte[] resultBytes = sha.digest();
			// 將位元組陣列轉換為16進位制
			String resultString = fromBytesToHex(resultBytes);
			// 返回
			return resultString;
		} catch (Exception e) {
			throw new RuntimeException(e);
		}

	}

	/**
	 * SHA演算法
	 * 
	 * @param data
	 * @return
	 */
	public static String encryptSHA(String data) {
		try {
			// 判斷資料的合法性
			if (data == null) {
				throw new RuntimeException("資料不能為NULL");
			}
			// 獲取SHA演算法的型別
			MessageDigest sha = MessageDigest.getInstance("SHA-512");
			// 加入資料
			sha.update(data.getBytes());
			// 獲取訊息摘要
			byte[] resultBytes = sha.digest();
			// 將位元組陣列轉換為16進位制
			String resultString = fromBytesToHex(resultBytes);
			// 返回
			return resultString;
		} catch (Exception e) {
			throw new RuntimeException(e);
		}
	}

	/**
	 * 將位元組陣列轉化為16進位制
	 * 
	 * @param resultBytes
	 * @return
	 */
	private static String fromBytesToHex(byte[] resultBytes) {
		StringBuilder builder = new StringBuilder();
		for (int i = 0; i < resultBytes.length; i++) {
			if (Integer.toHexString(0xFF & resultBytes[i]).length() == 1) {
				builder.append("0").append(
						Integer.toHexString(0xFF & resultBytes[i]));
			} else {
				builder.append(Integer.toHexString(0xFF & resultBytes[i]));
			}
		}
		return builder.toString();
	}
}
測試程式碼
public class Test {
	// 待加密的明文
	public static final String DATA = "test";

	public static void main(String[] args) throws Exception {

		/* Test SHA */
		String shaResult = SHAUtils.encryptSHA(DATA.getBytes());
		System.out.println(DATA + ">>>SHA>>>" + shaResult);

	}

}


相關推薦

MD(Message Digest ) 訊息摘要演算法SHA

      上一篇文章中介紹了基本的單向加密演算法 — — MD5,也大致的說了說它實現的原理。這篇文章繼續之前提到的單向加密,主要講的是 SHA,同 MD5 一樣,SHA 同樣也是一個系列,它包

MD(Message Digest ) 訊息摘要演算法MD5

1、訊息摘要的簡介      1.1訊息摘要的概念               唯一對應一個訊息或文字

Message Digest Algorithm MD5(訊息摘要演算法第五版)簡單瞭解

Message Digest Algorithm MD5(訊息摘要演算法第五版)為電腦保安領域廣泛使用的一種雜湊函式,用以提供訊息的完整性保護。 該演算法的檔案號為RFC 1321(R.Rivest,MIT Laboratory for Computer Sc

MDSHA、MAC訊息摘要演算法實現與應用

1.訊息摘要概述 訊息摘要(Message Digest)又稱為數字摘要(Digital Digest)。它是一個唯一對應一個訊息或文字的固定長度的值,它由一個單向Hash加密函式對訊息進行作用而產生。如果訊息在途中改變了,則接收者通過對收到訊息的新產生的摘要與原摘要比較,就可知道訊息是否被改變了。因此訊息摘

Java常用訊息摘要演算法-SHA

SHA是比較常用的訊息摘要演算法之一,其中比較常見的有SHA-1,SHA-256,SHA-512。這裡用Java程式碼實現一個簡單的工具類,可以提取字串或者檔案的SHA值。import java.io.File; import java.io.FileInputStream;

Java加密系列(三)訊息摘要演算法加密

訊息摘要演算法的分類 MD(Message Digest)訊息摘要 SHA(Secure Hash Algorithm)安全雜湊 MAC(Message Authentication Code)訊息認證碼 訊息摘要演算法的作用 訊息摘要演算法主要有以上3類,這3類演算法的

訊息摘要演算法-SHA

SHA 安全雜湊演算法 雜湊演算法:雜湊是資訊的提煉,通常其長度要比資訊小很多,且為一個固定長度,加密性強的雜湊一定是不可逆的,這就意味著通過雜湊結果,無法推出任何部分的原始資訊,任何輸入資訊的變化,哪怕是一位,都將導致雜湊結果的明顯變化,雜湊還是防衝突的,即找不出具有相同

java/訊息摘要演算法&數字簽名

一。訊息摘要演算法 常用摘要演算法:   以下 (HEX)內容:bc指Bouncy Castle  |  cc指:Apache commons Codec 1。訊息摘要演算法MD5及MD族(MD2,MD4)  訊息摘要演算法應用: MD

訊息摘要演算法(慕課網視訊總結與知識梳理)

訊息摘要演算法分類: MD(Message Digetst):訊息摘要 SHA(Secure Hash Algorithm):安全雜湊 MAC(Message Authentication Code):訊息認證碼 以上演算法主要是用來驗證資料的完

Go語言實現單向雜湊函式 —— MD5訊息摘要演算法、SHA256與224(Go語言實現)

 MD5訊息摘要演算法 MD5訊息摘要演算法(英語:MD5 Message-Digest Algorithm),一種被廣泛使用的密碼雜湊函式,可以產生出一個128位(16位元組)的雜湊值(hash value),用於確保資訊傳輸完整一致。 Go語言實現方式一: packag

Java實現訊息摘要演算法加密

訊息摘要演算法: MD(Message Digest) 訊息摘要 SHA(Secure Hash Algorithm) 安全雜湊 MAC(Message Authentication Code) 訊息認證碼 作用:(驗證資料完整性、數字簽名核心演算法) 將輸入的任意長度序列資

密碼學演算法 SHA-3 keccak 演算法

Author: John sha3 雜湊加密演算法,不可逆 Keccak演算法,sha家族最新演算法,採用的不同於 MD(如md5) 結構的海綿結構(sponge結構

密碼學摘要演算法SHA2

密碼學摘要演算法之SHA2 簡述 原理 簡述 前面的篇章中我們已經說明過,SHA實際包括有一系列演算法,分別是SHA-1、SHA-224、SHA-256、SHA-384以及SHA-512。而我們所說的SHA2實際是對後面4中的統稱。各種SHA

密碼學摘要演算法SHA1

密碼學摘要演算法之SHA1 SHA介紹 思想 處理過程 與MD5的區別 SHA介紹 SHA演算法,即安全雜湊演算法(Secure Hash Algorithm)是一種與MD5同源的資料加密演算法,該演算法經過加密專家多年來的發展和

密碼學摘要演算法MD5

密碼學摘要演算法之MD5 摘要演算法 MD5 原理 特點 用途 防止被篡改,一致性檢驗 數字簽名(防止抵賴或者說版權) 舉例: 安全訪問認證 搜尋

HMAC-SHA1和MD5 訊息摘要演算法(java)

最近專案中需要對接支付,用到HMAC-SHA1和MD5兩種加密演算法,簡單回顧一下。 一、HMAC-SHA1  HMAC是金鑰相關的雜湊運算訊息認證碼(Hash-based Message Authentication Code),HMAC運算利用雜湊演算法,以一個金鑰和

java訊息摘要演算法加密

訊息摘要演算法加密  訊息摘要演算法主要分為3類:MD(Message Digest)、SHA(Secure Hash Algorithm)、MAC(Message Authentication Code),以上3類演算法的主要作用是驗

資訊摘要演算法二:SHA1演算法分析及實現

SHA演算法,即安全雜湊演算法(Secure Hash Algorithm)是一種與MD5同源的資料加密演算法,該演算法經過加密專家多年來的發展和改進已日益完善,現在已成為公認的最安全的雜湊演算法之一,並被廣泛使用。1、概述SHA演算法能計算出一個數位資訊所對應到的,長度固定

MD5 (Message Digest Algorithm 5 資訊—摘要演算法5 ) 的一些體會 .

MD5 (Message Digest  Algorithm 5 資訊—摘要演算法5 ) 的一些體會 一、若我們定義一個函式 ,原型為:  String  MD5 ( Information info) 其中Information 表示任意長度的資訊,注意是任意長度的。 實現這個函式的最終要求:

.NET Core加解密實戰系列——訊息摘要與數字簽名演算法

![](https://img2020.cnblogs.com/blog/2029875/202006/2029875-20200629172528304-1596961448.png) --- [TOC] ## 簡介 加解密現狀,編寫此係列文章的背景: - 需要考慮系統環境相容性問題(Linux、W