用python的哈希函數(shù)對(duì)密碼加密
今天我將教大家如何用哈希函數(shù)將密碼加密
加密后的密碼是很難倒推的~
普通加密:
首先調(diào)用函數(shù)hashlib
import hashlib
然后使用哈希函數(shù)對(duì)密碼進(jìn)行加密
這里我使用sha256進(jìn)行加密
再造一個(gè)密碼出來(lái)
password = 'wotemo666'
接著用哈希函數(shù)對(duì)它進(jìn)行加密
注意:這里要使用encode對(duì)password進(jìn)行編碼格式聲明,不然會(huì)報(bào)錯(cuò)

hash_password = hashlib.sha256(password.encode("utf-8")).hexdigest()
print(hash_password)運(yùn)行這行代碼輸出的就是加密后的哈希值啦?。?!

圖中這行字符串就是 ‘wotemo666’ 對(duì)應(yīng)的哈希值
每個(gè)明文對(duì)應(yīng)一個(gè)哈希值,但一個(gè)哈希值卻對(duì)應(yīng)無(wú)數(shù)個(gè)明文
這就導(dǎo)致哈希值是不可逆的,這樣,你的密碼就更加安全啦~
下面是完整的代碼
# 首先調(diào)用函數(shù)hashlib
import hashlib
# 再造一個(gè)密碼出來(lái)
password = 'wotemo666'
# 用sha256對(duì)password進(jìn)行加密
hash_password = hashlib.sha256(password.encode("utf-8")).hexdigest()
# 輸出對(duì)應(yīng)的哈希值
print(hash_password)
進(jìn)階加密:
如果想讓你的密碼更加的安全,那就要給你的密碼加點(diǎn)鹽了
這里的加鹽就是指在明文密碼前或后插入一段隨機(jī)字符串,然后再進(jìn)行哈希加密
這樣得出來(lái)的哈希值就更加的復(fù)雜,就更不容易被破解啦
下面我們來(lái)實(shí)現(xiàn)吧
首先調(diào)用random函數(shù)隨機(jī)生成“鹽”
import random
這里我們要用到python中的string模塊生成a ~ Z和0 ~ 9的所有字符
調(diào)用string模塊
import string
String模塊中的常量:
string.digits:數(shù)字0~9
string.ascii_letters:所有字母(大小寫)
string.lowercase:所有小寫字母
string.printable:可打印字符的字符串
string.punctuation:所有標(biāo)點(diǎn)
string.uppercase:所有大寫字母
這里我們只需用到前兩個(gè)digits和ascii_letters就可以了
ps:如果想密碼更復(fù)雜一些可以使用punctuation生成所有標(biāo)點(diǎn),然后一同加入到鹽中去
這里我們使用while和random函數(shù)隨機(jī)生成可以控制長(zhǎng)度的鹽
先創(chuàng)建一個(gè)激活while的變量和一個(gè)儲(chǔ)存鹽的空白字符串
active = 0 salts = ''
接著用while生成鹽
while active < 10:
# 用active激活while
# 這里生成了一個(gè)長(zhǎng)度為20的鹽
# 想要生成多長(zhǎng)的鹽,就將示例中的10改為期望長(zhǎng)度的一半
# 但這里的值最好是整數(shù)
salt_one = random.choice(string.digits)
# salt_one生成一個(gè)隨機(jī)的數(shù)字
salt_two = random.choice(string.ascii_letters)
# salt_two生成一個(gè)隨機(jī)的字母(區(qū)分大小寫)
salt = salt_one + salt_two
#salt是它們的加和,這也就是為什么前面要減半
salts += salt
# 然后將加和后的值附加到剛才創(chuàng)建的空白字符串中
active += 1
# while函數(shù)基本用法我就不多說(shuō)了
這樣鹽就生成出來(lái)啦,如圖:

接下來(lái),我們將鹽附加到明文密碼上
after_salt_password = salts + password # 鹽的前后順序無(wú)所謂,password為你的密碼
然后,我們?cè)僬{(diào)用hashlib生成哈希值
這里的操作就和前面的一模一樣了,唯一不同的是密碼加鹽了
# 首先調(diào)用函數(shù)hashlib
import hashlib
# 再造一個(gè)密碼出來(lái)
password = 'wotemo666'
# 然后加鹽
after_salt_password = salts + password
# 用sha256對(duì)password進(jìn)行加密
hash_password = hashlib.sha256(after_salt_password.encode("utf-8")).hexdigest()
加鹽后的哈希值就更為復(fù)雜了

下面是完整的代碼
# 調(diào)用random, string, hashlib函數(shù)
import random
import string
import hashlib
# 初始化
active = 0
salts = ''
while active < 10:
# 用active激活while
# 這里生成了一個(gè)長(zhǎng)度為20的鹽
# 想要生成多長(zhǎng)的鹽,就將示例中的10改為期望長(zhǎng)度的一半
# 但這里的值最好是整數(shù)
salt_one = random.choice(string.digits)
# salt_one生成一個(gè)隨機(jī)的數(shù)字
salt_two = random.choice(string.ascii_letters)
# salt_two生成一個(gè)隨機(jī)的字母(區(qū)分大小寫)
salt = salt_one + salt_two
#salt是它們的加和,這也就是為什么前面要減半
salts += salt
# 然后將加和后的值附加到剛才創(chuàng)建的空白字符串中
active += 1
# while函數(shù)基本用法我就不多說(shuō)了
password = 'wotemo666'
# 然后加鹽
after_salt_password = salts + password
# 用sha256對(duì)password進(jìn)行加密
hash_password = hashlib.sha256(after_salt_password.encode("utf-8")).hexdigest()
# hash_password就是輸出的哈希值
print(hash_password)
你學(xué)會(huì)了嗎?
到此這篇關(guān)于用python的哈希函數(shù)對(duì)密碼加密的文章就介紹到這了,更多相關(guān)python哈希函數(shù)加密內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- python 密碼學(xué)示例——理解哈希(Hash)算法
- Python驗(yàn)證用戶密碼是否規(guī)范腳本示例
- python?密碼驗(yàn)證(滑塊驗(yàn)證)
- 詳解Python中的自定義密碼驗(yàn)證
- Python實(shí)現(xiàn)破解網(wǎng)站登錄密碼(帶token驗(yàn)證)
- python實(shí)現(xiàn)三次密碼驗(yàn)證的示例
- python實(shí)現(xiàn)密碼驗(yàn)證合格程序的思路詳解
- Python使用selenium實(shí)現(xiàn)網(wǎng)頁(yè)用戶名 密碼 驗(yàn)證碼自動(dòng)登錄功能
- Python使用bcrypt?或?Passlib?對(duì)系統(tǒng)用戶密碼進(jìn)行哈希和驗(yàn)證處理操作
相關(guān)文章
python使用OS模塊操作系統(tǒng)接口及常用功能詳解
os是?Python?標(biāo)準(zhǔn)庫(kù)中的一個(gè)模塊,提供了與操作系統(tǒng)交互的功能,在本節(jié)中,我們將介紹os模塊的一些常用功能,并通過(guò)實(shí)例代碼詳細(xì)講解每個(gè)知識(shí)點(diǎn)2023-06-06
Python Tornado之跨域請(qǐng)求與Options請(qǐng)求方式
這篇文章主要介紹了Python Tornado之跨域請(qǐng)求與Options請(qǐng)求方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-03-03
python實(shí)現(xiàn)人臉識(shí)別代碼
這篇文章主要介紹了python實(shí)現(xiàn)人臉識(shí)別代碼,還是比較不錯(cuò)的,這里分享個(gè)大家,共需要的朋友參考。2017-11-11
Python Unittest ddt數(shù)據(jù)驅(qū)動(dòng)的實(shí)現(xiàn)
本文主要介紹了Python Unittest ddt數(shù)據(jù)驅(qū)動(dòng)的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-02-02
Python實(shí)現(xiàn)備份MySQL數(shù)據(jù)庫(kù)的方法示例
這篇文章主要介紹了Python實(shí)現(xiàn)備份MySQL數(shù)據(jù)庫(kù)的方法,涉及Python針對(duì)mysql數(shù)據(jù)庫(kù)的連接及基于mysqldump命令操作數(shù)據(jù)庫(kù)備份的相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下2018-01-01
Python設(shè)置Socket代理及實(shí)現(xiàn)遠(yuǎn)程攝像頭控制的例子
這篇文章主要介紹了Python設(shè)置Socket代理及實(shí)現(xiàn)遠(yuǎn)程攝像頭控制的例子,皆是對(duì)socket模塊的實(shí)際運(yùn)用,需要的朋友可以參考下2015-11-11
Python實(shí)現(xiàn)控制臺(tái)中的進(jìn)度條功能代碼
下面小編就為大家分享一篇Python實(shí)現(xiàn)控制臺(tái)中的進(jìn)度條功能代碼,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2017-12-12

