日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網為廣大站長提供免費收錄網站服務,提交前請做好本站友鏈:【 網站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

Hi,大家好。我們在接口自動化測試項目中,有時候需要一些加密。今天給大伙介紹Python/ target=_blank class=infotextkey>Python實現各種 加密 ,接口加解密再也不愁。

目錄

一、項目加解密需求分析

六、Python加密庫PyCryptodome

一、項目加解密需求分析

1、網絡數據傳輸面臨的問題

私信小編01即可獲取大量Python學習資源

網絡安全涉及很多方面,而網絡數據的安全傳輸通常會面臨以下幾方面的威脅。

  • 數據竊聽與機密性:怎樣保證數據不會因為被截獲或竊聽而暴露?
  • 數據篡改與完整性:怎樣保證數據不會被惡意篡改?
  • 身份冒充與身份驗證:怎樣保證數據交互雙方的身份沒有被冒充?

2、解決方案

針對網絡數據安全問題,可以用以下幾種數據加密方式來解決(每種數據加密方式有多種不同的算法實現):

數據加密方式

描述

主要解決的問題

常用算法

對稱加密

指數據加密和解密使用相同的密鑰

數據的機密性

DES, AES

非對稱加密

也叫公鑰加密,指數據加密和解密使用不同的密鑰--密鑰對兒

身份驗證

DSA,RSA

單向加密

指只能加密數據,而不能解密數據

數據的完整性

MD5,SHA系列算法

3、Python加密模塊

主要用到以下幾個模塊:

模塊名

描述

hashlib

主要提供了一些常見的單向加密算法(如 MD5 , SHA 等),每種算法都提供了與其同名的函數實現。

hmac

提供了hmac算法的實現,hamc也是單向加密算法,但是它支持設置一個額外的密鑰(通常被稱為'salt')來提高安全性

secrets

這是Python3.6中新增的模塊,用于獲取安全隨機數。

base64

該模塊主要用于二進制數據與可打印ASCII字符之間的轉換操作,它提供了基于Base16, Base32, 和Base64算法以及實際標準Ascii85和Base85的編碼和解碼函數。

pycrypto

支持單向加密、對稱加密和公鑰加密以及隨機數操作,這是個第三方模塊,需要額外安裝。

4、字符串和Bytes互相轉化

我們所說的加密方式,都是對二進制編碼的格式進行加密的,對應到Python中,則是我們的Bytes。所以當我們在Python中進行加密操作的時候,要確保我們操作的是Bytes,否則就會報錯。將字符串和Bytes互相轉換可以使用encode()和decode()方法。

(1) 使用encode()編碼

encode():str對象的方法,用于將字符串轉換為二進制數據(即bytes),也稱為“編碼”。

Python實現各種加密,接口加解密不說難

 

輸出結果:

原字符: ITester軟件測試小棧
字符轉換成二進制: b'ITesterxc8xedxbcxfexb2xe2xcaxd4xd0xa1xd5xbb'

(2) 使用decode()解碼

decode():bytes對象的方法,用于將二進制數據轉換為字符串,也稱為“解碼”。

Python實現各種加密,接口加解密不說難

 

在設置解碼采用的字符編碼時,需要與編碼時采用的字符編碼一致。使用decode()方法時,同樣不會修改原字符串。

二、Base64加密

1、簡介

Base64是密碼學的基石,用64個字符來表示任意二進制數據的方法。可以將任意的二進制數據進行Base64編碼。所有的數據都能被編碼為并只用65個字符就能表示的文本文件( 65字符:A~Z a~z 0~9 + / = )。

2、編碼原理

1.將所有字符轉化為ASCII碼。

2.將ASCII碼轉化為8位二進制 。

3.將二進制3個歸成一組(不足3個在后邊補0)共24位,再拆分成4組,每組6位。

4.統一在6位二進制前補兩個0湊足8位。

5.將補0后的二進制轉為十進制。

6.從Base64編碼表獲取十進制對應的Base64編碼。

3、Python中base64的使用

Python內置的base64模塊可以直接進行base64的編解碼 。

Python實現各種加密,接口加解密不說難

 

輸出結果:

加密前為 :ITester軟件測試小棧
加密后為:SVRlc3Rlcui9r+S7tua1i+ivleWwj+agiA==

三、MD5加密

1、簡介

MD5加密即message-digest algorithm 5(信息-摘要算法),即信息-摘要算法,可以將一個字符串,或文件,或壓縮包,執行md5后,就可以生成一個固定長度為128bit的串。

2、用途

  • 加密注冊用戶的密碼。
  • 網站用戶上傳圖片 / 文件后,將MD5值作為文件名。(MD5可以保證唯一性)
  • key-value數據庫中使用MD5值作為key。
  • 比較兩個文件是否相同。(在下載資源的時候,發現網站提供了MD5值,就是用來檢測文件是否被篡改)

3、 Python中MD5的使用

由于MD5模塊在python3中被移除,在python3中使用hashlib模塊進行md5操作。

(1) 簡單示例

Python實現各種加密,接口加解密不說難

 

輸出結果:

加密前為 :ITester軟件測試小棧
加密后為:45dc3931b34133a1ebd17e376884b35b

(2) 登錄接口加密

md5進行用戶登錄網站進行密碼加密的示例:

import socket, struct, json

ip_port = ("127.0.0.1", 8000)
back_log = 5
buffer_size = 1024
tcp_client = socket.socket(socket.AF_.NET, socket.SOCK_STREAM)
tcp_client.connect(ip_port)

while True:
    cmd = input(">>>:")
    if not cmd: continue
    # 發送數據
    tcp_client.send(cmd.encode("gbk"))
    # 第一步:先收報頭
    header = tcp_client.recv(4)
    # 第二步:從報頭中解析(header數據的長度)
    header_size = struct.unpack("i", header)
    print('收到報頭長度=', header_size)
    # 第三步:收到報頭解析出對真實數據的描述信息
    header_json = tcp_client.recv(header_size)
    data = json.loads(header_json)
    print('收到報頭內容=', data)
    total_size = data['total_size']

    # 第三步:接收真實的數據
    recv_size = 0
    recv_data = b""
    while recv_size < total_size:
        data = tcp_client.recv(buffer_size)
        recv_data += data
        recv_size = len(recv_data)

    print('接收數據 =', recv_data.decode('gbk', 'ignore'))  # 如果設置為ignore,則會忽略非法字符;

tcp_client.close()  # 關閉

四、sha1加密

1、簡介

SHA1的全稱是Secure Hash Algorithm( 安全哈希算法 ) 。SHA1基于MD5,加密后的數據長度更長,它對長度小于264的輸入,產生長度為160bit的散列值。比MD5多32位,因此,比MD5更加安全,但SHA1的運算速度就比MD5要慢。

2、 Python中Sha1的使用

示例如下:

Python實現各種加密,接口加解密不說難

 

輸出結果:

加密前為 :ITester軟件測試小棧
加密后為:e933b46df326c0bb27cf075faf1d05eb92185f13

五、secrets加密

1、簡介

secrets模塊是Python 3.6新增的內置模塊,它可以生成用于管理密碼、賬戶驗證信息、安全令牌和相關秘密信息等數據的密碼強隨機數。總體來講,我們可以通過secrets模塊完成兩種操作:

  • 生成安全隨機數;
  • 生成一個篤定長度的隨機字符串,可用作令牌和安全URL;

2、 Python中secrets的使用

(1) 生成隨機密碼

生成一個由數字和字母組成的隨機8位密碼:

Python實現各種加密,接口加解密不說難

 

輸出結果:

I4S8Nn81

(2) 生成包含安全令牌的URL

生成一個用于找回密碼應用場景的,包含一個安全令牌的的臨時URL。

Python實現各種加密,接口加解密不說難

 

輸出結果:

https://ITester.com/reset=-b81gTnkWHaOyIKqv_EISLD1eHfYz8X5ptgYfhMBnbk

六、Python加密庫PyCryptodome

1、簡介

PyCrypto是 Python 中密碼學方面最有名的第三方軟件包,2012年已停止。幸運的是,該項目的分支PyCrytodome 取代了 PyCrypto。

2、DES加密

(1) 簡介

DES算法為密碼體制中的對稱密碼體制,又被稱為美國數據加密標準。DES是一個分組加密算法,典型的DES以64位為分組對數據加密,加密和解密用的是同一個算法。

(2) 使用

安裝和導入:

安裝:pip install pyDes
導入:from pyDes import des, CBC, PAD_PKCS5

示例:

from pyDes import des, CBC, PAD_PKCS5
import binascii

# 秘鑰
KEY = 'keiHG$93'

def des_encrypt(s):
    """
    DES 加密
    :param s: 原始字符串
    :return: 加密后字符串,16進制
    """
    secret_key = KEY  # 密碼
    iv = secret_key  # 偏移
    # secret_key:加密密鑰,CBC:加密模式,iv:偏移, padmode:填充
    des_obj = des(secret_key, CBC, iv, pad=None, padmode=PAD_PKCS5)
    # 返回為字節
    secret_bytes = des_obj.encrypt(s, padmode=PAD_PKCS5)
    # 返回為16進制
    return binascii.b2a_hex(secret_bytes)


def des_descrypt(s):
    """
    DES 解密
    :param s: 加密后的字符串,16進制
    :return:  解密后的字符串
    """
    secret_key = KEY
    iv = secret_key
    des_obj = des(secret_key, CBC, iv, pad=None, padmode=PAD_PKCS5)
    decrypt_str = des_obj.decrypt(binascii.a2b_hex(s), padmode=PAD_PKCS5)
    return decrypt_str

print(des_encrypt("ITester"))
print(des_descrypt("b248ebd299b31dd1"))

輸出結果:

b'b248ebd299b31dd1'
b'ITester'

3、3DES加密

3DES(或稱為Triple DES)是三重數據加密算法(TDEA,Triple Data Encryption Algorithm)塊密碼的通稱,是DES向AES過渡的加密算法。

4、AES加密

高級加密標準(Advanced Encryption Standard,縮寫:AES),在密碼學中又稱Rijndael加密法。速度快,編碼緊湊。

from Cryptodome.Cipher import AES
from Cryptodome import Random
from binascii import  a2b_hex


data = 'ITester軟件測試小棧'
#密鑰必須為16(AES-128),24,32
key = b'this is a 16 key'

#生成長度等于AES塊大小的不可重復的密鑰向量
iv =Random.new().read(AES.block_size)
print(iv)

#使用key和Iv初始化AES對象
mycipher = AES.new(key,AES.MODE_CFB,iv)
print(mycipher)
cip = mycipher.encrypt(data.encode())

#將iv加到加密的密鑰開頭
ciptext =iv + cip
print(ciptext)

#解密需要 key和iv 生成AES對象,取前16位是iv
mydecrypt = AES.new(key,AES.MODE_CFB,ciptext[:16])

#取后16位是密鑰
decrytext = mydecrypt.decrypt(ciptext[16:])
print(decrytext.decode())

輸出結果:

b'"xcbHzxd1>x08pxddxbcxf3Cx87lxf3xe5'
<Cryptodome.Cipher._mode_cfb.CfbMode object at 0x10df91eb0>
b'"xcbHzxd1>x08pxddxbcxf3Cx87lxf3xe5x0exdcx8fx1bxc0xe5Uxc6xa5'x7f*xa0x8bxa3xebUxefxbcxd7jx05d4x05'
ITester

七、RSA加密

1、簡介

RSA加密算法是一種非對稱加密算法, 使用openssl ,keytools等工具生成一對公私鑰對,使用被公鑰加密的數據可以使用私鑰來解密。

示例:

import rsa

# rsa加密
def rsaEncrypt(str):
    # 生成公鑰、私鑰
    (pubkey, privkey) = rsa.newkeys(512)
    print("公鑰: ", pubkey)
    print("私鑰: ", privkey)
    # 明文編碼格式
    content = str.encode('utf-8')
    # 公鑰加密
    crypto = rsa.encrypt(content, pubkey)
    return (crypto, privkey)

# rsa解密
def rsaDecrypt(str, pk):
    # 私鑰解密
    content = rsa.decrypt(str, pk)
    con = content.decode('utf-8')
    return con

(a, b) = rsaEncrypt("ITester軟件測試小棧")
print('加密后密文:')
print(a)
content = rsaDecrypt(a, b)
print('解密后明文:')
print(content)

輸出結果:

公鑰:  PublicKey(6814529323241172850728335141247508717269277267494229901386594011231139785660903876597435728831384748788754841049799215688731419667333062231824933307206319, 65537)
私鑰:  PrivateKey(6814529323241172850728335141247508717269277267494229901386594011231139785660903876597435728831384748788754841049799215688731419667333062231824933307206319, 65537, 6454447002622527176039652037136241453160399729960737093529936320752579012730277408644466653521211901816393814636252571192738395899494415991466200889769361, 4797673045355672432997022168818242182770881041225501784151212772936794554333725043, 1420382185034032902338315580117109933359732257353521366383139403561669333)
加密后密文:
b'kx81x06x95xbb7x1bx7fxd2xafx97x0f,xfexa5xf3`$>x07x98:x9axcbxbax13xf9xc1x1cx18x193|xe2?xa2sxc71x9axf1xeeVx0c%PBFxddxdbxf3xbfhOxd0xcdx06}Tx18xc5xa82x0b'
解密后明文:
ITester

八、總結

上面講了多種加密方法,我們簡單總結下:

  • 數據加密方式大體分為3類:單向加密、對稱加密和公鑰加密(非對稱加密)。
  • 這3類加密方式都各自包含不同的加密算法,如單向加密方式中包含MD5、SHA1、SHA256等,這些算法又稱為“哈希算法”或“散列算法”或“數據摘要算法”。
  • Python內置的hashlib和hmac只提供了單向加密的各種算法實現,如果要做對稱加密或者公鑰加密操作需要安裝第三方擴展模塊,常用的是pycrypto模塊。另外,hmac允許在使用哈希算法計算數據摘要時使用一個密鑰。
  • 隨機數操作可以通過三個模塊來實現,Python內置的random模塊和secrets模塊(Python 3.6中才可用),還可以通過pycrypto模塊中的Crypto.Random子包中的模塊來完成。
  • base64只適合編碼小段數據,且不能用于數據加密(算法是公開的,且沒有密鑰,所有人都可以解碼)。
  • pycrypto是一個加密算法庫,幾乎所有的加密算法都可以在它里面找到相應的實現模塊。

分享到:
標簽:Python
用戶無頭像

網友整理

注冊時間:

網站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網站吧!
最新入駐小程序

數獨大挑戰2018-06-03

數獨一種數學游戲,玩家需要根據9

答題星2018-06-03

您可以通過答題星輕松地創建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學四六

運動步數有氧達人2018-06-03

記錄運動步數,積累氧氣值。還可偷

每日養生app2018-06-03

每日養生,天天健康

體育訓練成績評定2018-06-03

通用課目體育訓練成績評定