欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

BCryptPasswordEncoder加密與MD5加密的區(qū)別及說明

 更新時間:2023年08月25日 11:42:26   作者:無奈的碼農(nóng)  
這篇文章主要介紹了BCryptPasswordEncoder加密與MD5加密的區(qū)別及說明,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教

MD5加密說明

MD5(Message Digest Algorithm 5)中文名為消息摘要算法第五版,是計算機安全領(lǐng)域廣泛使用的一種散列函數(shù),用以提供消息的完整性保護。

MD5作為一種常用的摘要算法(或指紋算法),其具有以下幾個重要的特點(個人觀點):

輸入任意長度信息,輸出長度固定:

  • MD5 可輸入任意長度的信息,其輸出均為128位(bit)固定長度的二進制數(shù)據(jù)。

運算速度快:

  • MD5的運算均為32位 與、或、非、位移等位運算,因此其運算速率快,幾乎不消耗CPU時間。

不可逆:

  • 根據(jù)MD5的的散列結(jié)果,無法計算出原始數(shù)據(jù)(查字典除外)。

碰撞性:

  • 原始數(shù)據(jù)與其MD5散列結(jié)果并非一一對應(yīng),存在多個原始數(shù)據(jù)的MD5結(jié)果相同的可能性。

不安全:

  • 2011年,RFC 6151 禁止MD5用作密鑰散列消息認證碼。
  • MD5計算結(jié)果一般為長度為32的字符串,偶爾也會遇到長度為16的字符串,MD5散列結(jié)果是128位(bit)固定長度的二進制數(shù)據(jù),也就是128個0/1的二進數(shù)據(jù)。

2011年后MD5加密算法可以被反推出來明文,被破解,已經(jīng)不推薦使用

案例使用

1.字符串

//加密為字符串返回	
DigestUtils.md5DigestAsHex("123456".getBytes());
//結(jié)果為:e10adc3949ba59abbe56e057f20f883e

2.byte[]字節(jié)返回

//加密字節(jié)返回
DigestUtils.md5Digest("123456".getBytes());
//結(jié)果為:[B@49476842

3.在字符串后追加加密字符返回StringBuilder

StringBuilder stringBuilder1 = DigestUtils.appendMd5DigestAsHex(bytes,new StringBuilder("123456"));
//結(jié)果:1234564280d89a5a03f812751f504cc10ee8a5

解密的話,在java中還沒有提供方法,但是有些網(wǎng)站是可以對MD5進行解密的

4. 如果對字符換加密過的字符串再次進行加密,則會出現(xiàn)一樣的加密結(jié)果。

案例:

BCryptPasswordEncoder說明

BCrypt 是一種密碼散列函數(shù),即單向函數(shù)。

  • 您無法解密 BCrypt 哈希,就像您無法從雞肉麥塊返回原始雞肉一樣。
  • 您只能驗證兩個 BCrypt 哈希值是否相同,從而驗證提供的密碼是否與原始密碼匹配。

一個典型的解決方案是向用戶發(fā)送一次性密碼重置鏈接,使用秘密問題或其他一些確認用戶身份的信息讓他們設(shè)置新密碼。

且每次加密過的值都不一樣

案例使用

1.多次執(zhí)行,結(jié)果不一樣

public static void main(String[] args) {
		String str = "123456";
		BCryptPasswordEncoder bCryptPasswordEncoder = new BCryptPasswordEncoder();
		String encode = bCryptPasswordEncoder.encode(str);
		System.out.println(encode);
		String encode1 = bCryptPasswordEncoder.encode(str);
		System.out.println(encode1);
}

結(jié)果:

2.對加密過的字符和原始數(shù)據(jù)進行對比

案例:

public static void main(String[] args) {
		String str = "123456";
		BCryptPasswordEncoder bCryptPasswordEncoder = new BCryptPasswordEncoder();
		String encode = bCryptPasswordEncoder.encode(str);
		System.out.println(encode);
		boolean matches1 = bCryptPasswordEncoder.matches(str, encode);
		System.out.println(matches1);
}

結(jié)果:

3.加密過的字符串直接與字符串對比

案例:

public static void main(String[] args) {
		String str = "123456";
		BCryptPasswordEncoder bCryptPasswordEncoder = new BCryptPasswordEncoder();
		String encode = bCryptPasswordEncoder.encode(str);
		boolean matches = encode.matches(str);
		System.out.println(encode);
		System.out.println(matches);
	}

結(jié)果:

由于str已經(jīng)被BCryptPasswordEncoder 加密過,再次使用加密過的matches對比,是不一樣的,加密過的str是一個新的對象encode ,新的對象encode 對比str,肯定是不一樣的,則會返回false。

整理:

//另外BCryptPasswordEncoder的使用:
//加密:
bcryptPasswordEncoder.encoder(password)
//比較:
bcrytPasswordEncoder.matches(rawPassword,encodedPassword)

總結(jié)

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • mybatis3中@SelectProvider傳遞參數(shù)方式

    mybatis3中@SelectProvider傳遞參數(shù)方式

    這篇文章主要介紹了mybatis3中@SelectProvider傳遞參數(shù)方式。具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • Java設(shè)計模式之策略模式案例詳解

    Java設(shè)計模式之策略模式案例詳解

    策略模式(Strategy?Pattern)定義了一組同類型的算法,在不同的類中封裝起來,每種算法可以根據(jù)當(dāng)前場景相互替換,從而使算法的變化獨立于使用它們的客戶端即算法的調(diào)用者
    2022-07-07
  • Java實現(xiàn)的簡單畫圖板示例

    Java實現(xiàn)的簡單畫圖板示例

    這篇文章主要介紹了Java實現(xiàn)的簡單畫圖板,涉及java使用swing組件進行圖形繪制相關(guān)操作技巧,需要的朋友可以參考下
    2018-08-08
  • spring是如何解析xml配置文件中的占位符

    spring是如何解析xml配置文件中的占位符

    這篇文章主要介紹了spring是如何解析xml配置文件中的占位符,幫助大家更好的理解和使用spring框架,感興趣的朋友可以了解下
    2020-11-11
  • SpringBoot Mybatis Plus公共字段自動填充功能

    SpringBoot Mybatis Plus公共字段自動填充功能

    這篇文章主要介紹了SpringBoot Mybatis Plus公共字段自動填充功能的相關(guān)資料,需要的朋友可以參考下
    2017-04-04
  • Java面試最容易被刷的重難點之鎖的使用策略

    Java面試最容易被刷的重難點之鎖的使用策略

    鎖像synchronized同步塊一樣,是一種線程同步機制,但比Java中的synchronized同步塊更復(fù)雜。因為鎖(以及其它更高級的線程同步機制)是由synchronized同步塊的方式實現(xiàn)的,所以我們還不能完全擺脫synchronized關(guān)鍵字
    2021-10-10
  • Java實現(xiàn)圖章或簽名插在pdf的固定位置

    Java實現(xiàn)圖章或簽名插在pdf的固定位置

    使用Java技術(shù)在word轉(zhuǎn)換成pdf過程中實現(xiàn)將圖章或者簽名插入在pdf中,并生成帶圖章或者簽名的pdf,來完成某些特定場景的需求,文中有詳細的代碼示例,需要的朋友可以參考下
    2023-10-10
  • MyBatis-Plus實現(xiàn)多表聯(lián)查的方法實戰(zhàn)

    MyBatis-Plus實現(xiàn)多表聯(lián)查的方法實戰(zhàn)

    這篇文章主要給大家介紹了關(guān)于MyBatis-Plus實現(xiàn)多表聯(lián)查的方法,MyBatis Plus是一款針對MyBatis框架的增強工具,它提供了很多方便的方法來實現(xiàn)多表聯(lián)查,需要的朋友可以參考下
    2023-07-07
  • SpringBoot+LayIM+t-io 實現(xiàn)好友申請通知流程

    SpringBoot+LayIM+t-io 實現(xiàn)好友申請通知流程

    這篇文章主要介紹了 SpringBoot+LayIM+t-io 實現(xiàn)好友申請通知流程,本文圖文并茂給大家介紹的非常詳細,需要的朋友可以參考下
    2017-12-12
  • Java?ConcurrentHashMap實現(xiàn)線程安全的代碼示例

    Java?ConcurrentHashMap實現(xiàn)線程安全的代碼示例

    眾所周知ConcurrentHashMap是HashMap的多線程版本,HashMap?在并發(fā)操作時會有各種問題,而這些問題,只要使用ConcurrentHashMap就可以完美解決了,本文將給詳細介紹ConcurrentHashMap是如何保證線程安全的
    2023-05-05

最新評論