♥ はじめに
Python を使用している多くの友人は、仕事でデータをエンコードまたは暗号化する必要に遭遇したことがあると思います。今日の記事では主に、Python を使用して一般的に使用されるデータ エンコードとデータ暗号化方法を実現する方法を紹介します。言うことはあまりないので、本題に直接行きましょう。
1.base64エンコーディング
Base64エンコーディングとは何ですか?
Base64 は、64 個の印刷可能な文字に基づいてバイナリ データを表現する方法です。
Python でデータを Base64 エンコードするには、公式の Base64 ライブラリを使用できます。
場合:
import base64
data= "musen"
# base编码
data = data.encode()
res = base64.b64encode(data)
print(res)
# base64解码
res2 = base64.b64decode(res)
print(res2)
自動テストを学びたい場合は、ここで一連のビデオをお勧めします。このビデオは、ステーション B のネットワーク全体における最初のインターフェイス自動テスト チュートリアルと言えます。同時に、オンライン ユーザーの数は増加しています。 1,000 に達しました。収集すべきメモとさまざまな Lu Dashen Technical Exchange があります: 798478386
2. 一般的なハッシュ アルゴリズム:
MD4、MD5、SHA-1、SHA-224、SHA-256、SHA-384、SHA-5 など、多くのハッシュ アルゴリズムがあります。その中でも比較的一般的なのが MD5 で、MD5 暗号化とも呼ばれます。
MD5暗号化とは何ですか?
MD5 (Message Digest Algorithm 5) は不可逆的なハッシュ アルゴリズムです。つまり、MD5 による暗号化後に元のテキストを取得する方法がなく、復号化アルゴリズムもありません。
Python には、一般的なハッシュ アルゴリズムを実装する hashlib という公式ライブラリがあり、作業で MD5 暗号化を使用したい場合は、hashlib ライブラリを直接使用できます。
ケース
from hashlib import md5
def encrypt_md5(data):
"""md5加密"""
# 创建md5对象
new_md5 = md5()
new_md5.update(data.encode('utf-8'))
res = new_md5.hexdigest()
# 加密
return res
3.DES暗号化
対称暗号化とは何ですか?
対称暗号化とは、暗号化と復号化に同じキーを使用して暗号化と復号化を行うことを指します。
EDS暗号化とは何ですか?
対称暗号化は比較的伝統的な暗号化方式です。暗号化と復号化の操作には同じキーが使用されます。情報の送信者と受信者は、情報の送信と処理時に同じキーを共有する必要があります。
Python には、DES 暗号化の実装に使用できる pyDes というサードパーティ ライブラリがあります。使用する前に、pip コマンドでインストールする必要があります: pip install pyDes
場合:
from pyDes import des, CBC, PAD_PKCS5
import binascii
def des_encrypt(s, KEY):
secret_key = KEY
iv = secret_key
k = des(secret_key, CBC, iv, pad=None, padmode=PAD_PKCS5)
en = k.encrypt(s, padmode=PAD_PKCS5)
return binascii.b2a_hex(en).decode()
def des_descrypt(s, KEY):
secret_key = KEY
iv = secret_key
k = des(secret_key, CBC, iv, pad=None, padmode=PAD_PKCS5)
de = k.decrypt(binascii.a2b_hex(s), padmode=PAD_PKCS5)
return de.decode()
if __name__ == '__main__':
# 秘钥
KEY = 'mHAxsLtt'
# 加密
res = des_encrypt("python666", KEY)
print(res)
# 解密
res2 = des_descrypt(res, KEY)
print(res2)
4. 3DES暗号化
3DES暗号化とは何ですか?
3DES (または Triple DES) は、Triple Data Encryption Algorithm (TDEA、Triple Data Encryption Algorithm) ブロック暗号の総称です。これは、DES 暗号化アルゴリズムを各データ ブロックに 3 回適用することに相当します。
3DES 暗号化は Python で使用でき、pyDes モジュールを使用して実装できます。
場合:
import base64
import hashlib
import pyDes
def encrypt_3des(data):
key = "U8NjHq1ZP10="
hash_md5 = hashlib.md5()
hash_md5.update(key.encode(encoding='UTF-8'))
key = hash_md5.hexdigest()
iv = key[0:8]
key2 = key[0:24]
k = pyDes.triple_des(key2, pyDes.CBC, IV=iv, pad=None, padmode=pyDes.PAD_PKCS5)
d = k.encrypt(data.encode())
d = base64.b64encode(d)
return d.decode()
def descrypt_3des(data):
key = "U8NjHq1ZP10="
hash_md5 = hashlib.md5()
hash_md5.update(key.encode(encoding='UTF-8'))
key = hash_md5.hexdigest()
iv = key[0:8]
key2 = key[0:24]
k = pyDes.triple_des(key2, pyDes.CBC, IV=iv, pad=None, padmode=pyDes.PAD_PKCS5)
data = base64.b64decode(data)
d = k.decrypt(data)
return d.decode()
if __name__ == '__main__':
res = encrypt_3des('lemonban')
print(res)
res2 = descrypt_3des(res)
print(res2)
5.AES暗号化
AES暗号化とは何ですか?
AES も対称暗号化です。以前の DES を置き換えるために使用され、より高いセキュリティを備えています。多くの関係者によって分析され、世界中で広く使用されており、2002 年 5 月 26 日に有効な標準となりました。
Python で Aes 暗号化を実装するためのライブラリは多数あります。これらを自分で pypi にダウンロードしてインストールできます。次の例では、ライブラリ Crypto を使用しています
ケース
import base64
from Crypto.Cipher import AES
class AesEncrypt:
# 密钥
key = '0CoJUm6Qyw8W8jud'
# 偏移量
vi = '0102030405060708'
def encrypt(self, data):
"""加密"""
data = data.encode('utf8')
data = (lambda s: s + (16 - len(s) % 16) * chr(16 - len(s) % 16).encode('utf-8'))(data)
cipher = AES.new(self.key.encode('utf8'), AES.MODE_CBC, self.vi.encode('utf8'))
encryptedbytes = cipher.encrypt(data)
encodestrs = base64.b64encode(encryptedbytes)
enctext = encodestrs.decode('utf8')
return enctext
def decrypt(self, data):
"""解密"""
data = data.encode('utf8')
encodebytes = base64.decodebytes(data)
cipher = AES.new(self.key.encode('utf8'), AES.MODE_CBC, self.vi.encode('utf8'))
text_decrypted = cipher.decrypt(encodebytes)
unpad = lambda s: s[0:-s[-1]]
text_decrypted = unpad(text_decrypted)
text_decrypted = text_decrypted.decode('utf8')
return text_decrypted
if __name__ == '__main__':
# 注意点:加密数据中有中文的时候,会有问题
data = "musen123"
aes = AesEncrypt()
# 加密
enctext = aes.encrypt(data)
print(enctext)
# # 解密
text_decrypted = aes.decrypt(enctext)
print(text_decrypted)