網(wǎng)站首頁(yè) 編程語(yǔ)言 正文
一、base64模塊
base64模塊提供了在二進(jìn)制數(shù)據(jù)和可打印ASCII字符間編解碼的功能,包括 RFC3548中定義的Base16, Base32, Base64, Ascii85, Base85等編碼。
base64模塊屬于標(biāo)準(zhǔn)庫(kù),無(wú)需進(jìn)行安裝,導(dǎo)入即可使用。
base64模塊支持兩種接口:
- bytes類型數(shù)據(jù)進(jìn)行base64編碼。即將類字節(jié)對(duì)象編碼為由ASCII可打印字符表示的bytes。
- base64編碼的bytes類型進(jìn)行解碼。即將類字節(jié)對(duì)象或純ASCII字符組成的Unicode字符串解碼為bytes。
注意:
編碼與解碼的處理對(duì)象是byte,及參數(shù)必須是二進(jìn)制數(shù)據(jù),才可以進(jìn)行正常使用。
1、對(duì)字符串編解碼
import base64 str = "Hello Python" # 默認(rèn)以u(píng)tf-8編碼 byte_str = str.encode("utf-8") b64_str = base64.b64encode(byte_str) print(b64_str) print("-------------") # 默認(rèn)以u(píng)tf-8解碼 byte_str2 = base64.b64decode(b64_str) str2 = byte_str2.decode("utf-8") print(str2)
2、對(duì)URL編解碼
import base64 url = "http://www.baidu.com?k1=v1&k2=值二" # 默認(rèn)以u(píng)tf-8編碼 byte_url = url.encode("utf-8") b64_url = base64.b64encode(byte_url) print(b64_url) # b'aHR0cDovL3d3dy5iYWlkdS5jb20/azE9djEmazI95YC85LqM' print("-------------") # 默認(rèn)以u(píng)tf-8解碼 byte_url2 = base64.b64decode(b64_url) url2 = byte_url2.decode("utf-8") print(url) # http://www.baidu.com?k1=v1&k2=值二
二、hashlib模塊
1、hashlib模塊
hashlib是Python的內(nèi)置模塊,提供了多種安全方便的常見(jiàn)摘要算法,其中主要包括MD5,SHA1,SHA256,SHA384,SHA512等。這些摘要方法在使用上通用,返回帶有同樣接口的hash對(duì)象,對(duì)算法的選擇,差別只在于構(gòu)造方法的選擇。
摘要算法又稱哈希算法、散列算法。
它通過(guò)一個(gè)函數(shù)算法,把任意長(zhǎng)度的數(shù)據(jù)轉(zhuǎn)換為一個(gè)長(zhǎng)度固定的數(shù)據(jù)串)。
1.1 常用屬性
import hashlib #列出hashlib內(nèi)容 print(dir(hashlib)) #列出所有加密算法 print(hashlib.algorithms_available) print(hashlib.algorithms_guaranteed) #產(chǎn)生的散列字節(jié)大小。 h.digest_size #哈希內(nèi)部塊的大小 h.block_size
1.2 常用方法
# 創(chuàng)建指定加密模式的hash對(duì)象 hash.new([arg]) # 更新哈希對(duì)象以字符串參數(shù)。 # 如果同一個(gè)hash對(duì)象重復(fù)調(diào)用該方法,m.update(a); m.update(b) 等價(jià)于 m.update(a+b) hash.update(arg) # 返回摘要,作為二進(jìn)制數(shù)據(jù)字符串值。 hash.digest() # 返回摘要,作為十六進(jìn)制數(shù)據(jù)字符串值 hash.hexdigest() # 復(fù)制 hash.copy()
1.3 使用步驟
方式一:
import hashlib # -------以 MD5為例------- # 1. 創(chuàng)建hash工廠 m = hashlib.md5() # 2. 在內(nèi)存里面加載二進(jìn)制數(shù)據(jù) # m.update('Hello'.encode('utf-8')) # m.update('Python'.encode('utf-8')) ## 等價(jià)于,如果二進(jìn)制數(shù)據(jù)很長(zhǎng)的話,可以分開(kāi)更新 m.update('Hello Python'.encode('utf-8')) print(m.digest_size) # 16 print(m.block_size) # 64 # 3、返回十六進(jìn)制str摘要值 hash_value = m.hexdigest() print(hash_value) # a709c173220d6185d12248faa9f40ac8 # 3.返回bytes格式的消息摘要 print(m.digest()) # b'\xa7\t\xc1s"\ra\x85\xd1"H\xfa\xa9\xf4\n\xc8'
方式二:
import hashlib ''' 一個(gè)通用的構(gòu)造方法, name:是某個(gè)算法的字符串名稱, data:是可選的bytes類型待摘要的數(shù)據(jù)。 ''' m = hashlib.new('md5', b'Hello Python') print(m.hexdigest()) print(m.digest()) print("-----復(fù)制方法測(cè)試-----") # 復(fù)制 m2 = m.copy() print(m2) print(m2.hexdigest()) print(m2.digest())
2、MD5(消息摘要算法)
MD5消息摘要算法(英語(yǔ):MD5 Message-Digest Algorithm),一種被廣泛使用的密碼雜湊函數(shù),可以產(chǎn)生出一個(gè)128位的散列值(hash value),用于確保信息傳輸完整一致。
示例代碼如下:
import hashlib def jm_md5(password): # 構(gòu)建MD5對(duì)象 m = hashlib.md5() # 自定義加鹽值 m.update('abc'.encode(encoding='utf-8')) m.update(password.encode(encoding='utf-8')) # 返回十六進(jìn)制str摘要值 password_md5 = m.hexdigest() return password, password_md5 res = jm_md5('123456') print(res) # ('123456', '0659c7992e268962384eb17fafe88364')
3、SHA-256(安全哈希算法)
安全哈希算法(Secure Hash Algorithm)主要適用于數(shù)字簽名標(biāo)準(zhǔn)(Digital Signature Standard DSS)里面定義的數(shù)字簽名算法(Digital Signature Algorithm DSA)。驗(yàn)證數(shù)據(jù)的完整性。
科學(xué)家們推出了SHA1,SHA224,SHA256,SHA384,SHA512,當(dāng)然位數(shù)越長(zhǎng),破解難度越大,但同時(shí)生成加密的消息摘要所耗時(shí)間也更長(zhǎng)。常用的還是SHA-256。
示例代碼如下:
import hashlib def jm_sha256(password): # 構(gòu)建MD5對(duì)象 m = hashlib.sha256() # m = hashlib.sha512() # 自定義加鹽值 m.update('abc'.encode(encoding='utf-8')) m.update(password.encode(encoding='utf-8')) # 返回十六進(jìn)制str摘要值 password_md5 = m.hexdigest() return password, password_md5 res = jm_sha256('123456') print(res) # ('123456', 'a03c32fcd351cba2d9738622b083bed022ef07793bd92b59faea0207653f371d')
– 求知若饑,虛心若愚。
原文鏈接:https://blog.csdn.net/qq_42402854/article/details/129165456
- 上一篇:沒(méi)有了
- 下一篇:沒(méi)有了
相關(guān)推薦
- 2022-03-14 跨域問(wèn)題Response to preflight request doesn't pass acc
- 2023-10-16 微信小程序radio單選按鈕選中與取消
- 2022-09-01 jquery實(shí)現(xiàn)全選功能_jquery
- 2022-05-09 如何利用python讀取圖片屬性信息_python
- 2021-12-16 jquery+swiper組件實(shí)現(xiàn)時(shí)間軸滑動(dòng)年份tab切換效果_jquery
- 2023-07-07 使用python sdk添加刪除阿里云pvc路由
- 2022-08-26 pandas應(yīng)用實(shí)例之pivot函數(shù)詳解_python
- 2022-05-05 碎片拼接技術(shù)恢復(fù)XenServer服務(wù)器SQL?Server數(shù)據(jù)庫(kù)數(shù)據(jù)_XenServer
- 欄目分類
-
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲(chǔ)小
- 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)證過(guò)濾器
- Spring Security概述快速入門(mén)
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯(cuò)誤: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)-簡(jiǎn)單動(dòng)態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對(duì)象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊(duì)列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支