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

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

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

MD5加密說明

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

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

輸入任意長(zhǎng)度信息,輸出長(zhǎng)度固定:

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

運(yùn)算速度快:

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

不可逆:

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

碰撞性:

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

不安全:

  • 2011年,RFC 6151 禁止MD5用作密鑰散列消息認(rèn)證碼。
  • MD5計(jì)算結(jié)果一般為長(zhǎng)度為32的字符串,偶爾也會(huì)遇到長(zhǎng)度為16的字符串,MD5散列結(jié)果是128位(bit)固定長(zhǎng)度的二進(jìn)制數(shù)據(jù),也就是128個(gè)0/1的二進(jìn)數(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)站是可以對(duì)MD5進(jìn)行解密的

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

案例:

BCryptPasswordEncoder說明

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

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

一個(gè)典型的解決方案是向用戶發(fā)送一次性密碼重置鏈接,使用秘密問題或其他一些確認(rèn)用戶身份的信息讓他們?cè)O(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.對(duì)加密過的字符和原始數(shù)據(jù)進(jìn)行對(duì)比

案例:

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.加密過的字符串直接與字符串對(duì)比

案例:

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對(duì)比,是不一樣的,加密過的str是一個(gè)新的對(duì)象encode ,新的對(duì)象encode 對(duì)比str,肯定是不一樣的,則會(huì)返回false。

整理:

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

總結(jié)

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

相關(guān)文章

最新評(píng)論