網站首頁 編程語言 正文
今天我將教大家如何用哈希函數將密碼加密
加密后的密碼是很難倒推的~
普通加密:
首先調用函數hashlib
import hashlib
然后使用哈希函數對密碼進行加密
這里我使用sha256進行加密
再造一個密碼出來
password = 'wotemo666'
接著用哈希函數對它進行加密
注意:這里要使用encode對password進行編碼格式聲明,不然會報錯
hash_password = hashlib.sha256(password.encode("utf-8")).hexdigest() print(hash_password)
運行這行代碼輸出的就是加密后的哈希值啦!!!
圖中這行字符串就是 ‘wotemo666’ 對應的哈希值
每個明文對應一個哈希值,但一個哈希值卻對應無數個明文
這就導致哈希值是不可逆的,這樣,你的密碼就更加安全啦~
下面是完整的代碼
# 首先調用函數hashlib import hashlib # 再造一個密碼出來 password = 'wotemo666' # 用sha256對password進行加密 hash_password = hashlib.sha256(password.encode("utf-8")).hexdigest() # 輸出對應的哈希值 print(hash_password)
進階加密:
如果想讓你的密碼更加的安全,那就要給你的密碼加點鹽了
這里的加鹽就是指在明文密碼前或后插入一段隨機字符串,然后再進行哈希加密
這樣得出來的哈希值就更加的復雜,就更不容易被破解啦
下面我們來實現(xiàn)吧
首先調用random函數隨機生成“鹽”
import random
這里我們要用到python中的string模塊生成a ~ Z和0 ~ 9的所有字符
調用string模塊
import string
String模塊中的常量:
string.digits:數字0~9
string.ascii_letters:所有字母(大小寫)
string.lowercase:所有小寫字母
string.printable:可打印字符的字符串
string.punctuation:所有標點
string.uppercase:所有大寫字母
這里我們只需用到前兩個digits和ascii_letters就可以了
ps:如果想密碼更復雜一些可以使用punctuation生成所有標點,然后一同加入到鹽中去
這里我們使用while和random函數隨機生成可以控制長度的鹽
先創(chuàng)建一個激活while的變量和一個儲存鹽的空白字符串
active = 0 salts = ''
接著用while生成鹽
while active < 10: # 用active激活while # 這里生成了一個長度為20的鹽 # 想要生成多長的鹽,就將示例中的10改為期望長度的一半 # 但這里的值最好是整數 salt_one = random.choice(string.digits) # salt_one生成一個隨機的數字 salt_two = random.choice(string.ascii_letters) # salt_two生成一個隨機的字母(區(qū)分大小寫) salt = salt_one + salt_two #salt是它們的加和,這也就是為什么前面要減半 salts += salt # 然后將加和后的值附加到剛才創(chuàng)建的空白字符串中 active += 1 # while函數基本用法我就不多說了
這樣鹽就生成出來啦,如圖:
接下來,我們將鹽附加到明文密碼上
after_salt_password = salts + password # 鹽的前后順序無所謂,password為你的密碼
然后,我們再調用hashlib生成哈希值
這里的操作就和前面的一模一樣了,唯一不同的是密碼加鹽了
# 首先調用函數hashlib import hashlib # 再造一個密碼出來 password = 'wotemo666' # 然后加鹽 after_salt_password = salts + password # 用sha256對password進行加密 hash_password = hashlib.sha256(after_salt_password.encode("utf-8")).hexdigest()
加鹽后的哈希值就更為復雜了
下面是完整的代碼
# 調用random, string, hashlib函數 import random import string import hashlib # 初始化 active = 0 salts = '' while active < 10: # 用active激活while # 這里生成了一個長度為20的鹽 # 想要生成多長的鹽,就將示例中的10改為期望長度的一半 # 但這里的值最好是整數 salt_one = random.choice(string.digits) # salt_one生成一個隨機的數字 salt_two = random.choice(string.ascii_letters) # salt_two生成一個隨機的字母(區(qū)分大小寫) salt = salt_one + salt_two #salt是它們的加和,這也就是為什么前面要減半 salts += salt # 然后將加和后的值附加到剛才創(chuàng)建的空白字符串中 active += 1 # while函數基本用法我就不多說了 password = 'wotemo666' # 然后加鹽 after_salt_password = salts + password # 用sha256對password進行加密 hash_password = hashlib.sha256(after_salt_password.encode("utf-8")).hexdigest() # hash_password就是輸出的哈希值 print(hash_password)
你學會了嗎?
原文鏈接:https://blog.csdn.net/shr105/article/details/122799672
相關推薦
- 2022-03-29 在pyqt5中展示pyecharts生成的圖像問題_python
- 2022-05-19 yolov5調用usb攝像頭及本地攝像頭的方法實例_python
- 2022-08-18 R語言ComplexHeatmap繪制復雜熱圖heatmap_R語言
- 2022-10-06 Android開發(fā)Jetpack組件Room使用講解_Android
- 2022-09-09 python的endswith()的使用方法及實例_python
- 2023-04-01 pytorch常用函數之torch.randn()解讀_python
- 2023-11-14 python matlibplot將不同數據的柱狀圖和折線圖畫在同一張圖中
- 2022-01-18 在使用npm install時遇到的問題 npm ERR! code ERESOLVE
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細win安裝深度學習環(huán)境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態(tài)字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支