Java中的信息摘要算法MessageDigest類用法詳解
MessageDigest 是什么?
java.security.MessageDigest類為應(yīng)用程序提供信息摘要算法的功能,如 MD5 或 SHA-1或SHA-256 算法。
信息摘要是安全的單向哈希函數(shù),它接收任意大小的數(shù)據(jù),并輸出固定長度的哈希值。
MessageDigest 對象調(diào)用getInstance初始化,使用 update 方法處理數(shù)據(jù)。任何時候都可以調(diào)用 reset 方法重置摘要。一旦所有需要更新的數(shù)據(jù)都已經(jīng)被更新了,應(yīng)該調(diào)用 digest 方法之一完成哈希計算。
對于給定數(shù)量的更新數(shù)據(jù),digest 方法只能被調(diào)用一次。在調(diào)用 digest 之后,MessageDigest 對象被重新設(shè)置成其初始狀態(tài)。
常用的方法
兩種getInstance
- public static MessageDigest getInstance(String algorithm) throws NoSuchAlgorithmException
- 返回實現(xiàn)指定摘要算法的 MessageDigest 對象。
- algorithm - 所請求算法的名稱
- public static MessageDigest getInstance(String algorithm, String provider) throws NoSuchAlgorithmException, NoSuchProviderException
- 返回實現(xiàn)指定摘要算法的 MessageDigest 對象。
- algorithm - 所請求算法的名稱
- provider - 提供者的名稱。
update
- public void update(byte[] input)
- 使用指定的 byte 數(shù)組更新摘要。
digest
- public byte[] digest()
- 通過執(zhí)行諸如填充之類的最終操作完成哈希計算。在調(diào)用此方法之后,摘要被重置。
isEqual
- public static boolean isEqual(byte[] digesta, byte[] digestb)
- 比較兩個摘要的相等性。做簡單的字節(jié)比較。
- 注意:Provider可以通過 java.security.Security.getProviders()
- 方法獲取已注冊提供者列表。比較常用的有“SUN”
SUN提供的常用的算法名稱有
- MD2
- MD5
- SHA-1
- SHA-256
- SHA-384
- SHA-512
使用的例子
static byte[] md5(String key) {
MessageDigest md;
try {
// 返回實現(xiàn)指定摘要算法的 MessageDigest 對象
md = MessageDigest.getInstance("MD5");
// getBytes(String charsetName): 使用指定的字符集將字符串編碼為 byte 序列,并將結(jié)果存儲到一個新的 byte 數(shù)組中
byte[] bytes = key.getBytes(StandardCharsets.UTF_8);
// 使用指定的 byte 數(shù)組更新摘要
md.update(bytes);
} catch (NoSuchAlgorithmException e) { //NoSuchAlgorithmException: 當(dāng)請求特定的加密算法但在環(huán)境中不可用時,將拋出此異常
// 拋出非法狀態(tài)異常
throw new IllegalStateException(e.getMessage(), e);
}
// 通過執(zhí)行諸如填充之類的最終操作完成哈希計算。在調(diào)用此方法之后,摘要被重置
return md.digest();
}到此這篇關(guān)于Java中的信息摘要算法MessageDigest類用法詳解的文章就介紹到這了,更多相關(guān)信息摘要算法MessageDigest類內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
MyEclipse 2016 CI 4新增BootStrap模板
MyEclipse2016是一款全球使用最為廣泛的企業(yè)級開發(fā)環(huán)境程序,這篇文章主要介紹了MyEclipse 2016 CI 4新增BootStrap模板的相關(guān)資料,非常不錯,具有參考借鑒價值,需要的朋友可以參考下2016-06-06
idea插件篇之java內(nèi)存分析工具(JProfiler)的使用
這篇文章主要介紹了idea插件篇之java內(nèi)存分析工具(JProfiler),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-09-09
SpringBoot整合DeepSeek技術(shù)指南(實際應(yīng)用場景)
這篇文章主要介紹了SpringBoot整合DeepSeek技術(shù)指南,本文通過實際應(yīng)用場景模擬給大家介紹的非常詳細(xì),感興趣的朋友一起看看吧2025-04-04
Java代碼規(guī)范與質(zhì)量檢測插件SonarLint的使用
本文主要介紹了Java代碼規(guī)范與質(zhì)量檢測插件SonarLint的使用,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-08-08

