網站首頁 編程語言 正文
文章目錄
- 簡介
- 加鹽的加密方式
- md5 加鹽方式
- bcrypt 方式
簡介
一般前端把用戶密碼發給服務端,服務端實際業務中如何存儲密碼呢,如何存儲密碼才能保證密碼不被開發者獲取或者被截取呢,保證密碼的安全
加鹽的加密方式
現在的企業開發大都采用這種方式了,比較安全的密碼存儲算法要求鹽值至少在 8 Bytes 以上
首先肯定不可能明文傳輸,必須對密碼加密,那怎么加密呢,我往下細看。一般加密比如 md5 直接為什么不行,因為破解者可能通過暴力破解的方式,字典破解的方式還是能找到原始密碼是啥
因此我需要一種加鹽的加密方式:比如 md5 加鹽加密,即鹽是一個隨機生成的字符串,然后我們將 salt 和原始密碼連接起來,將其加密,這樣就不容易被破解了。即先加鹽再加密
md5 加鹽方式
注冊時候:
- 用戶密碼和其他信息到服務端
- 服務端識別密碼,隨機函數生成鹽和密碼做拼接
- 拼接后進行 md5 加密
- 將 salt 和 hash 值存放數據庫
登錄:
- 用戶密碼到服務端
- 服務端獲取 salt,對密碼進行加鹽加密和數據庫比對
- 比對正確登錄 ok,比對錯誤則失敗
bcrypt 方式
特點:相比于 md5,bcrypt 每次相同密碼生成的密文都不同,md5 則相同,bcrypt 加密計算比 md5 更久,因此破解更難
import "golang.org/x/crypto/bcrypt"
// EncryptPassword 將密碼加密,需要傳入密碼返回的是加密后的密碼
func EncryptPassword(password string) (string, error) {
// 加密密碼,使用 bcrypt 包當中的 GenerateFromPassword 方法,bcrypt.DefaultCost 代表使用默認加密成本
encryptPassword, err := bcrypt.GenerateFromPassword([]byte(password), bcrypt.DefaultCost)
if err != nil {
// 如果有錯誤則返回異常,加密后的空字符串返回為空字符串,因為加密失敗
return "", err
} else {
// 返回加密后的密碼和空異常
return string(encryptPassword), nil
}
}
// EqualsPassword 對比密碼是否正確
func EqualsPassword(password, encryptPassword string) bool {
// 使用 bcrypt 當中的 CompareHashAndPassword 對比密碼是否正確,第一個參數為加密后的密碼,第二個參數為未加密的密碼
err := bcrypt.CompareHashAndPassword([]byte(encryptPassword), []byte(password))
// 對比密碼是否正確會返回一個異常,按照官方的說法是只要異常是 nil 就證明密碼正確
return err == nil
}
原文鏈接:https://abcnull.blog.csdn.net/article/details/129438319
- 上一篇:沒有了
- 下一篇:沒有了
相關推薦
- 2022-10-22 Go語言同步等待組sync.WaitGroup結構體對象方法詳解_Golang
- 2022-03-27 Android實現房貸計算器功能_Android
- 2023-01-18 Qt實現制作簡單的計算器_C 語言
- 2023-01-10 CentOS7?minimal?最小化安裝網絡設置過程_Linux
- 2023-03-27 Android三種雙屏異顯實現方法介紹_Android
- 2022-08-02 Android中TextView自動適配文本大小的幾種解決方案_Android
- 2022-06-08 FreeRTOS實時操作系統的內存管理分析_操作系統
- 2022-10-07 VsCode使用EmmyLua插件調試Unity工程Lua代碼的詳細步驟_C#教程
- 欄目分類
-
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支