Python で一般的なデータ エンコーディングと対称暗号化を実装する方法がわかりませんか? この記事を読めば十分ですよ~

♥ はじめに

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     

【更新】B局が教えるPythonインターフェースの自動テストの最も詳しい実践チュートリアル集(実戦最新版)_哔哩哔哩_bilibili 【更新】Pythonの自動テストの最も詳細な実践チュートリアル集B局が教えるインターフェース(実戦編) 最新版)には以下の動画が合計200本あります: 1. 【インターフェース自動化】ソフトウェアテストの市場状況とテスターの能力基準。, 2. [インターフェイスの自動化] Requests ライブラリとその基礎となるメソッド呼び出しロジックに精通した、3. [インターフェイスの自動化] インターフェイス自動化の戦闘と正規表現と JsonPath エクストラクターの適用など。さらにエキサイティングなビデオについては、注目してください。 UPアカウント。https://www.bilibili.com/video/BV17p4y1B77x/?spm_id_from=333.337&vd_source=488d25e59e6c5b111f7a1a1a16ecbe9a 

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)

おすすめ

転載: blog.csdn.net/m0_73409141/article/details/132233200