網(wǎng)站首頁 編程語言 正文
文章目錄
- 簡介
- 加鹽的加密方式
- md5 加鹽方式
- bcrypt 方式
簡介
一般前端把用戶密碼發(fā)給服務(wù)端,服務(wù)端實(shí)際業(yè)務(wù)中如何存儲(chǔ)密碼呢,如何存儲(chǔ)密碼才能保證密碼不被開發(fā)者獲取或者被截取呢,保證密碼的安全
加鹽的加密方式
現(xiàn)在的企業(yè)開發(fā)大都采用這種方式了,比較安全的密碼存儲(chǔ)算法要求鹽值至少在 8 Bytes 以上
首先肯定不可能明文傳輸,必須對(duì)密碼加密,那怎么加密呢,我往下細(xì)看。一般加密比如 md5 直接為什么不行,因?yàn)槠平庹呖赡芡ㄟ^暴力破解的方式,字典破解的方式還是能找到原始密碼是啥
因此我需要一種加鹽的加密方式:比如 md5 加鹽加密,即鹽是一個(gè)隨機(jī)生成的字符串,然后我們將 salt 和原始密碼連接起來,將其加密,這樣就不容易被破解了。即先加鹽再加密
md5 加鹽方式
注冊(cè)時(shí)候:
- 用戶密碼和其他信息到服務(wù)端
- 服務(wù)端識(shí)別密碼,隨機(jī)函數(shù)生成鹽和密碼做拼接
- 拼接后進(jìn)行 md5 加密
- 將 salt 和 hash 值存放數(shù)據(jù)庫
登錄:
- 用戶密碼到服務(wù)端
- 服務(wù)端獲取 salt,對(duì)密碼進(jìn)行加鹽加密和數(shù)據(jù)庫比對(duì)
- 比對(duì)正確登錄 ok,比對(duì)錯(cuò)誤則失敗
bcrypt 方式
特點(diǎn):相比于 md5,bcrypt 每次相同密碼生成的密文都不同,md5 則相同,bcrypt 加密計(jì)算比 md5 更久,因此破解更難
import "golang.org/x/crypto/bcrypt"
// EncryptPassword 將密碼加密,需要傳入密碼返回的是加密后的密碼
func EncryptPassword(password string) (string, error) {
// 加密密碼,使用 bcrypt 包當(dāng)中的 GenerateFromPassword 方法,bcrypt.DefaultCost 代表使用默認(rèn)加密成本
encryptPassword, err := bcrypt.GenerateFromPassword([]byte(password), bcrypt.DefaultCost)
if err != nil {
// 如果有錯(cuò)誤則返回異常,加密后的空字符串返回為空字符串,因?yàn)榧用苁?/span>
return "", err
} else {
// 返回加密后的密碼和空異常
return string(encryptPassword), nil
}
}
// EqualsPassword 對(duì)比密碼是否正確
func EqualsPassword(password, encryptPassword string) bool {
// 使用 bcrypt 當(dāng)中的 CompareHashAndPassword 對(duì)比密碼是否正確,第一個(gè)參數(shù)為加密后的密碼,第二個(gè)參數(shù)為未加密的密碼
err := bcrypt.CompareHashAndPassword([]byte(encryptPassword), []byte(password))
// 對(duì)比密碼是否正確會(huì)返回一個(gè)異常,按照官方的說法是只要異常是 nil 就證明密碼正確
return err == nil
}
原文鏈接:https://abcnull.blog.csdn.net/article/details/129438319
- 上一篇:沒有了
- 下一篇:沒有了
相關(guān)推薦
- 2023-01-26 Redis的數(shù)據(jù)復(fù)制過程詳解_Redis
- 2022-10-25 C++?API功能設(shè)計(jì)的實(shí)現(xiàn)_C 語言
- 2022-05-28 Entity?Framework?Core種子數(shù)據(jù)Data-Seeding_實(shí)用技巧
- 2023-11-17 深度學(xué)習(xí)中分布式訓(xùn)練的現(xiàn)狀及未來
- 2022-06-17 Android自定義實(shí)現(xiàn)可回彈的ScollView_Android
- 2022-08-10 pandas函數(shù)isnull的具體使用_python
- 2023-02-26 pandas的apply函數(shù)用法詳解_python
- 2022-07-29 C++超詳細(xì)講解智能指針_C 語言
- 欄目分類
-
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲(chǔ)小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯(cuò)誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實(shí)現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡單動(dòng)態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對(duì)象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊(duì)列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支