網(wǎng)站首頁 編程語言 正文
今天我將教大家如何用哈希函數(shù)將密碼加密
加密后的密碼是很難倒推的~
普通加密:
首先調(diào)用函數(shù)hashlib
import hashlib
然后使用哈希函數(shù)對密碼進(jìn)行加密
這里我使用sha256進(jìn)行加密
再造一個密碼出來
password = 'wotemo666'
接著用哈希函數(shù)對它進(jìn)行加密
注意:這里要使用encode對password進(jìn)行編碼格式聲明,不然會報錯
hash_password = hashlib.sha256(password.encode("utf-8")).hexdigest() print(hash_password)
運(yùn)行這行代碼輸出的就是加密后的哈希值啦!!!
圖中這行字符串就是 ‘wotemo666’ 對應(yīng)的哈希值
每個明文對應(yīng)一個哈希值,但一個哈希值卻對應(yīng)無數(shù)個明文
這就導(dǎo)致哈希值是不可逆的,這樣,你的密碼就更加安全啦~
下面是完整的代碼
# 首先調(diào)用函數(shù)hashlib import hashlib # 再造一個密碼出來 password = 'wotemo666' # 用sha256對password進(jìn)行加密 hash_password = hashlib.sha256(password.encode("utf-8")).hexdigest() # 輸出對應(yīng)的哈希值 print(hash_password)
進(jìn)階加密:
如果想讓你的密碼更加的安全,那就要給你的密碼加點(diǎn)鹽了
這里的加鹽就是指在明文密碼前或后插入一段隨機(jī)字符串,然后再進(jìn)行哈希加密
這樣得出來的哈希值就更加的復(fù)雜,就更不容易被破解啦
下面我們來實(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:所有大寫字母
這里我們只需用到前兩個digits和ascii_letters就可以了
ps:如果想密碼更復(fù)雜一些可以使用punctuation生成所有標(biāo)點(diǎn),然后一同加入到鹽中去
這里我們使用while和random函數(shù)隨機(jī)生成可以控制長度的鹽
先創(chuàng)建一個激活while的變量和一個儲存鹽的空白字符串
active = 0 salts = ''
接著用while生成鹽
while active < 10: # 用active激活while # 這里生成了一個長度為20的鹽 # 想要生成多長的鹽,就將示例中的10改為期望長度的一半 # 但這里的值最好是整數(shù) salt_one = random.choice(string.digits) # salt_one生成一個隨機(jī)的數(shù)字 salt_two = random.choice(string.ascii_letters) # salt_two生成一個隨機(jī)的字母(區(qū)分大小寫) salt = salt_one + salt_two #salt是它們的加和,這也就是為什么前面要減半 salts += salt # 然后將加和后的值附加到剛才創(chuàng)建的空白字符串中 active += 1 # while函數(shù)基本用法我就不多說了
這樣鹽就生成出來啦,如圖:
接下來,我們將鹽附加到明文密碼上
after_salt_password = salts + password # 鹽的前后順序無所謂,password為你的密碼
然后,我們再調(diào)用hashlib生成哈希值
這里的操作就和前面的一模一樣了,唯一不同的是密碼加鹽了
# 首先調(diào)用函數(shù)hashlib import hashlib # 再造一個密碼出來 password = 'wotemo666' # 然后加鹽 after_salt_password = salts + password # 用sha256對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 # 這里生成了一個長度為20的鹽 # 想要生成多長的鹽,就將示例中的10改為期望長度的一半 # 但這里的值最好是整數(shù) salt_one = random.choice(string.digits) # salt_one生成一個隨機(jī)的數(shù)字 salt_two = random.choice(string.ascii_letters) # salt_two生成一個隨機(jī)的字母(區(qū)分大小寫) salt = salt_one + salt_two #salt是它們的加和,這也就是為什么前面要減半 salts += salt # 然后將加和后的值附加到剛才創(chuàng)建的空白字符串中 active += 1 # while函數(shù)基本用法我就不多說了 password = 'wotemo666' # 然后加鹽 after_salt_password = salts + password # 用sha256對password進(jìn)行加密 hash_password = hashlib.sha256(after_salt_password.encode("utf-8")).hexdigest() # hash_password就是輸出的哈希值 print(hash_password)
你學(xué)會了嗎?
原文鏈接:https://blog.csdn.net/shr105/article/details/122799672
相關(guān)推薦
- 2022-06-15 go語言定時器Timer及Ticker的功能使用示例詳解_Golang
- 2022-12-09 C++?Boost?Optional示例超詳細(xì)講解_C 語言
- 2022-08-10 python中ThreadPoolExecutor線程池和ProcessPoolExecutor進(jìn)程
- 2022-05-10 V-for中通過變量+索引實(shí)現(xiàn)單獨(dú)控制
- 2022-07-22 springboot項目整合配置knife4j
- 2022-03-29 詳解python字符串相關(guān)str_python
- 2023-01-31 C#實(shí)現(xiàn)偽裝文件夾功能_C#教程
- 2022-07-28 pytest使用parametrize將參數(shù)化變量傳遞到fixture_python
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- 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錯誤: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)-簡單動態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支