關於python中密碼加鹽的學習體會

2021-08-26 17:50:53 字數 2271 閱讀 4529

給密碼加密是什麼:使用者註冊的密碼一般**管理人員會利用md5方法加密,這種加密方法的好處是它是單向加密的,也就是說,你只有在提前知道某一串密碼對應的md5加密碼,才能反推出密碼是多少,雖然有極小的機率可能造成兩個密碼加密之後的值相等(這種現象稱為碰撞),不過基本上不用擔心,因為概率是極低的。在常用的hashlib模組裡還有sha1()等方法,它的本質和md5是一致的,只是產生的結果是160 bit位元組,通常用乙個40位的16進製制字串表示。而md5是最常見的加密演算法,生成速度很快,生成結果是固定的128 bit位元組,通常用乙個32位的16進製制字串表示。

彩虹表是乙個用於加密雜湊函式逆運算的預先計算好的表, 為破解密碼的雜湊值(或稱雜湊值、微縮圖、摘要、指紋、雜湊密文)而準備。一般主流的彩虹表都在100g以上。 這樣的表常常用於恢復由有限集字元組成的固定長度的純文字密碼。

md5和sha1加密介紹

import hashlib

md5=hashlib.md5()

md5.update('this is an example'.encode('utf-8'))

md5.update('again'.encode('utf-8')) #這裡要記得update()方法可以多次呼叫,可以自己試一試。

print(md5.hexdigest())

#承接上面

sha1=hashlib.sha1()

sha1.update('this is an example'.encode('utf-8'))

sha1.update('...'.encode('utf-8'))

print(sha1.hexdigest())

下面利用md5加密和加鹽的方法,實現簡單的使用者註冊,將資訊儲存在字典中,然後模擬登陸。

#!/usr/bin/python3

#-*-coding:utf-8-*-

import hashlib,random

#註冊storage={}

defregistration

(u,p):

if u in storage:

return

'username occupied.please choose another username...'

else:

storage[u]=users(u,p)

#加密方法

defget_md5

(s):

return hashlib.md5(s.encode('utf-8')).hexdigest()

#登陸class

users

(object):

def__init__

(self,username,password):

self.username=username #!!!!!!!注意鹽是隨機給的,每註冊乙個賬號給一次鹽,封裝在users類裡面,在login函式裡比較相等時,

# a.salt是註冊時封裝好的鹽,這時是固定的鹽,所以只要賬號密碼對了就可以了。

self.salt=''.join([chr(random.randint(48,122)) for i in range(20)])

self.password=get_md5(password+self.salt)

deflogin

(user,pw):

if user not

in storage.keys():

return

'wrong username'

else:

a=storage[user]

if a.password==get_md5(pw+a.salt):

return

'succeeded'

else:

return

'wrong password'

registration('mary','12345')

registration('bob','aa895')

registration('kirk','ba155')

print(storage)

print(login('mary','12345'))

最重要是理解每一次的鹽都封裝好了,在login函式中,只要使用者輸入的密碼+封裝好的鹽正確,即可實現登陸

關於python中密碼加鹽的學習體會小結

給密碼加密是什麼 使用者註冊的密碼一般 管理人員會利用md5方法加密,這種加密方法的好處是它是單向加密的,也就是說,你只有在提前知道某一串密碼對應的md5加密碼,才能反推出密碼是多少,雖然有極小的機率可能造成兩個密碼加密之後的值相等 這種現象稱為碰撞 不過基本上不用擔心,因為概率是極低的。在常用的h...

給你的密碼加鹽

最開始接觸web開發時,對於使用者表的密碼基本是明文儲存,如 username password zp1996 123456 zpy 123456789這種方式可以說很不安全,一旦資料庫洩漏,那麼所以得使用者資訊就會被洩漏。之前,國內普遍採用這種方式,造成了很多的事故,如csdn600萬使用者資訊洩...

關於密碼學的總結

古典密碼與現代密碼 對稱加密與非對稱加密 單向雜湊函式 編碼與加密 數字簽名與數字證書 區分古典加密和現代加密的乙個很重要的因素是,古典加密一般都是比較簡單的,而現代加密基本不存在手工解密的可能 古典加密又分為以下兩種 1 置換密碼 把明文中的字母重新排列,字母本身不變,只改變其位置。2 代換密碼 ...