??? 前期回顧悄悄告訴你:前端如何獲取本機(jī)IP,輕松一步開啟網(wǎng)絡(luò)探秘之旅_彩色之外的博客-CSDN博客前端獲取 本機(jī) IP 教程https://blog.csdn.net/m0_57904695/article/details/131855907?spm=1001.2014.3001.5501
? ? ? ? ? 在前端密碼加密方案中,bcrypt與SHA-256都是常見的加密算法,它們各有優(yōu)劣。
首先,bcrypt是一種專門用于密碼哈希的算法,并且包含了自帶的鹽。它使用Salt和Cost參數(shù)來控制哈希的復(fù)雜程度。bcrypt的主要優(yōu)點(diǎn)是它的計(jì)算成本可調(diào)節(jié),可以增加破解密碼的難度。這意味著即使密碼遭到泄露,攻擊者也需要花費(fèi)很長時(shí)間和大量計(jì)算資源進(jìn)行破解。因此,bcrypt常常被認(rèn)為是一種更安全的密碼哈希算法。
? ? ? ? ? ?其次,SHA-256是一種常用的加密散列函數(shù),廣泛應(yīng)用于密碼學(xué)和數(shù)據(jù)完整性驗(yàn)證領(lǐng)域。與bcrypt不同,SHA-256并不自帶鹽,因此你需要自行生成和存儲(chǔ)鹽值。SHA-256的計(jì)算速度相對(duì)較快,但不具備計(jì)算成本調(diào)節(jié)的功能。這意味著,如果密碼遭到泄露,攻擊者可以使用現(xiàn)代硬件和技術(shù)快速破解較弱的密碼。
? ? ? ? ?綜上所述,如果你關(guān)注密碼的安全性,推薦使用bcrypt作為密碼加密算法。bcrypt自帶鹽,并且計(jì)算成本可調(diào)節(jié),能有效增加破解密碼的難度。對(duì)于bcrypt來說,你不需要自行生成鹽值,它會(huì)在哈希過程中自動(dòng)處理。
? ? ? ? 然而,在前端密碼加密方案中,加密只是整個(gè)安全體系的一部分。你還需要考慮其他方面的安全性,比如傳輸?shù)募用?、防止XSS攻擊、賬號(hào)鎖定等等。因此,在設(shè)計(jì)密碼加密方案時(shí),請(qǐng)綜合考慮所有安全要素,并遵循最佳實(shí)踐。
? ?
? ? 安全性不僅取決于哈希算法本身,還取決于其使用方式和上下文。
目錄
?? MD5
???SHA-256 + 鹽值
?? 源碼位置
???bcrypt (推薦)
??? 謝謝觀看
?? MD5
? ? ? ? MD5是一種廣泛用于數(shù)據(jù)校驗(yàn)和加密的算法。它接受一個(gè)輸入(通常是消息或數(shù)據(jù))并生成一個(gè)128位(16字節(jié))的哈希值作為輸出。
MD5算法通過將輸入數(shù)據(jù)分成固定大小的塊,并對(duì)每個(gè)塊進(jìn)行一系列的運(yùn)算來生成哈希值。生成的哈希值具有以下特點(diǎn):
1. 不可逆性:無法從哈希值反推出原始輸入數(shù)據(jù)。
2. 相同輸入生成相同哈希值:對(duì)于相同的輸入數(shù)據(jù),無論執(zhí)行多少次,都會(huì)生成相同的哈希值。
3. 哈希沖突可能性:不同的輸入數(shù)據(jù)可能會(huì)生成相同的哈希值,這稱為哈希沖突。? ? ? ? 由于MD5算法存在一些安全漏洞,例如容易被碰撞攻擊和預(yù)映像攻擊,因此不再推薦用于安全敏感的應(yīng)用。在需要更高級(jí)別的數(shù)據(jù)安全性時(shí),推薦使用更強(qiáng)大和安全性更高的哈希算法,如SHA-256、SHA-512等。
???SHA-256 + 鹽值
? ? ? ? SHA-256(Secure Hash Algorithm 256-bit)是一種密碼學(xué)安全散列函數(shù),它接受任意長度的輸入數(shù)據(jù),并生成一個(gè)256位(32字節(jié))的哈希值作為輸出。
? ? ? ?SHA-256是SHA-2系列中的一種算法,是SHA-224和SHA-512之間的中間版本。它是由美國國家安全局(NSA)設(shè)計(jì),廣泛應(yīng)用于數(shù)據(jù)完整性校驗(yàn)、數(shù)字簽名、密碼學(xué)協(xié)議等領(lǐng)域。
? ? ? ?與MD5相比,SHA-256提供了更高的安全性和更好的抗碰撞能力。它具有以下特點(diǎn):
1. 不可逆性:無法從哈希值反推出原始輸入數(shù)據(jù)。
2. 相同輸入生成相同哈希值:對(duì)于相同的輸入數(shù)據(jù),無論執(zhí)行多少次,都會(huì)生成相同的哈希值。
3. 哈希沖突可能性極低:不同的輸入數(shù)據(jù)生成相同哈希值的可能性極低,可以被認(rèn)為是可以忽略不計(jì)的。? ? ? ?SHA-256廣泛應(yīng)用于密碼學(xué)和信息安全領(lǐng)域,例如在數(shù)字證書、SSL/TLS握手過程、密碼存儲(chǔ)和驗(yàn)證等方面。它提供了更強(qiáng)大的數(shù)據(jù)完整性保護(hù)和安全性,是目前常用的哈希算法之一。
? ? ? ? ? 加鹽是指在密碼哈希過程中引入一個(gè)隨機(jī)生成的字符串,稱為鹽(salt),并將其與密碼進(jìn)行組合后再進(jìn)行哈希計(jì)算。這個(gè)鹽值會(huì)與每個(gè)用戶的密碼單獨(dú)關(guān)聯(lián),并且將其存儲(chǔ)在數(shù)據(jù)庫中。 加鹽可以增加密碼哈希的復(fù)雜度,提高密碼的安全性,即使兩個(gè)用戶使用相同的密碼,由于使用了不同的鹽值,其哈希結(jié)果也會(huì)有所區(qū)別。這樣即使黑客獲得了哈希值,也很難通過暴力破解找到原始的密碼。
1:首先,安裝?js-sha256
庫:?
pnpm install js-sha256
2:在您的Vue組件中引入js-sha256
:?
import { sha256 } from 'js-sha256';
3:在需要使用SHA256哈希的地方,調(diào)用?sha256?
函數(shù)并加鹽,傳入要哈希的字符串作為輸入:
import { sha256 } from 'js-sha256';
const generateSalt = () => {
const randomBytes = new Uint8Array(16);
crypto.getRandomValues(randomBytes);
return Array.from(randomBytes, (byte) =>
byte.toString(16).padStart(2, '0')
).join('');
};
const salt = generateSalt();
console.log('!這里輸出 ?? ==>:', salt);
const password = 'userPassword';
const saltedPassword = salt + password;
const hashedPassword = sha256(saltedPassword);
console.log('!這里輸出 ?? ==>:', hashedPassword);
可以將其用作數(shù)據(jù)驗(yàn)證、密碼存儲(chǔ)等用途,關(guān)于安全性,除了使用?js-sha256?
庫之外,還建議采取以下措施:
- 使用HTTPS協(xié)議來保護(hù)傳輸數(shù)據(jù)的安全性。
- 在前端進(jìn)行輸入驗(yàn)證和過濾,以確保只有有效和合法的數(shù)據(jù)被傳遞給哈希函數(shù)。
- 對(duì)于密碼存儲(chǔ)和認(rèn)證,最好使用專門的密碼哈希函數(shù)和密碼學(xué)方案,如bcrypt、scrypt或Argon2等。
- 仔細(xì)保護(hù)密鑰和敏感數(shù)據(jù),避免將它們明文存儲(chǔ)在前端代碼或客戶端瀏覽器中。
?SHA256哈希函數(shù)本身并不能防止所有安全問題,還需要綜合考慮其他因素來確保系統(tǒng)的安全性,如合理的安全策略、用戶身份驗(yàn)證和授權(quán)等。
?? 源碼位置
???bcrypt (推薦)
pnpm install bcrypt
請(qǐng)確認(rèn)您使用的 NodeJS 版本是穩(wěn)定版本;目前不支持不穩(wěn)定版本,使用不穩(wěn)定版本時(shí)創(chuàng)建的問題將被關(guān)閉。
請(qǐng)至少升級(jí)到 v5.0.0??bcrypt依賴
import bcrypt from 'bcrypt';
/**
* 生成哈希密碼
* @param myPlaintextPassword 明文密碼
* @param saltRounds 鹽值生成的輪數(shù),默認(rèn)為10
* @returns 哈希密碼
*/
export const returnBcrypt = (myPlaintextPassword: string, saltRounds?: number): string => {
// 技術(shù) 1(在單獨(dú)的函數(shù)調(diào)用上生成鹽和哈希):
// const salt = bcrypt.genSaltSync(saltRounds);
// const hash = bcrypt.hashSync(myPlaintextPassword, salt);
// 技術(shù) 2(自動(dòng)生成鹽和哈希):
const hash = bcrypt.hashSync(myPlaintextPassword, saltRounds);
return hash;
};
??? 源碼位置
??? 謝謝觀看
文章來源:http://www.zghlxwxcb.cn/news/detail-753976.html
?_______________________________??期待再見??_______________________________文章來源地址http://www.zghlxwxcb.cn/news/detail-753976.html
到了這里,關(guān)于前端密碼加密 —— bcrypt、MD5、SHA-256、鹽的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!