使用者密碼加密在python和go中的應用和統一

2021-10-19 12:23:55 字數 1949 閱讀 2413

目的是python專案遷移到go時,資料庫不用動,使用者原來的密碼資訊都可以使用

web框架是flask,加密方法直接用werkzeug.security,預設演算法(pbkdf2:sha256),鹽取預設8位,迭代次數用150000,密碼儲存格式為pbkdf2:method:iterations$salt$hash

這裡是用的是預設的,pbkdf2:sha256:150000$salt$hash

werkzeug.security中相關的加解密方法

# werkzeug/security.py

defgenerate_password_hash

(password, method=

"pbkdf2:sha256"

, salt_length=8)

: salt = gen_salt(salt_length)

if method !=

"plain"

else

"" h, actual_method = _hash_internal(method, salt, password)

return

"%s$%s$%s"

%(actual_method, salt, h)

defcheck_password_hash

(pwhash, password)

:if pwhash.count(

"$")

<2:

return

false

method, salt, hashval = pwhash.split(

"$",2)

return safe_str_cmp(_hash_internal(method, salt, password)[0

], hashval)

在go下實現和python一樣的加解密方式需要手動搞一下

// security.go

import

("fmt"

"time"

"errors"

"strings"

"math/rand"

"encoding/hex"

"crypto/sha256"

"golang.org/x/crypto/pbkdf2"

)//生成鹽

func

_gen_salt

(length int

)string

return salt

}//解析已儲存的密碼

func

_parse

(data string

)(method string

, salt string

, h string

)return r[0]

, r[1]

, r[2]

}func

_hash_internal

(password string

, salt string

, iter int)(

string

,error

)func

generatepasswordhash

(password string)(

string

,error

)return

_hash_internal

(password, salt,

150000)}

func

checkpasswordhash

(pwhash string

, password string

)bool

return strings.

equalfold

(t, pwhash)

}

使用者密碼加密簡介

大多數開發人員使用資料庫儲存密碼,如果密碼直接以明文的形式存放在資料庫中,則系統很不安全。使用雜湊演算法可以解決這一問題。雜湊是一種單向演算法,一旦資料被抓換,將無法再獲得其原始值,可以使用雜湊演算法對密碼進行加密,然後將其儲存在資料庫中。使用者輸入密碼後,可以再次使用雜湊演算法對其進行轉換,然後將...

php加密使用者密碼

1.md5,2.password hashing api 使用者密碼加密 password hashing options salt custom function for salt 自定義函式來獲得鹽值 salt afxbxymkclsw46y7b8c5qn56zs test cost 12 th...

使用者登入密碼加密

密碼加密 param pwd 原始密碼 param salt 鹽值 return public string encryptedpassword string pwd,string salt 生成鹽 string salt new securerandomnumbergenerator nextby...