ECBモードでAESの暗号化と復号化(Python3.7)

本稿では、この問題を解決するために

この記事では、実装のECBモードでAES暗号化アルゴリズムのPython3.7の暗号化と復号化を説明することです。、あまりにも導入しないここ原理を具現化するAES暗号化アルゴリズムは、テキストを参照することができます参照リンクの終わりを知りたいです。

主に二つの問題を解決するために:

  1. Python3.7のバージョンでは、インストールパッケージに依存(長い時間のいくつかのブログがあり、Python3.7には適用されません言及したモジュール)
  2. 問題のPythonのバージョンので、コードPython3.6の下で他の問題ベースのブログではありませんでPython3.7で実行します

背景

プロジェクトに遭遇した爬虫類では、いくつかのサイトは、AESは暗号化ECBモードを使用してパスワードを占めています。

# 加密前的数据
123456asd
# 加密后的数据
3cfeba82c31b6635e8fb085e04529e74
# 密钥
8NONwyJtHesysWpM

使用するオンラインオンラインAESの暗号化と復号化、AES暗号化と復号化を、してみてください。

マーク

テストは、発見された後AES、暗号化ECB模式埋めるために、pkcs7paddingデータブロックを128位、出力形式がされhexた結果は、あなたがしたい場合に得られます。

(これは、フォーマット決意暗号文の出力に応じて行うことができるのBase64を終了==典型的には、暗号文出力形式でそうでなければHEX形式)

質問1:暗号モジュールのインストールエラー

ピップpycryptoインストールモジュール、次のエラーを投げます:

 error: command 'C:\\Program Files (x86)\\Microsoft Visual Studio 14.0\\VC\\BIN\\cl.exe' failed with exit status 2

ソリューション:

参照してください。python3.7インストールPyCryptoを

質問2:エラーへのコードのオンラインコピー

直接コードをコピーするためのオンラインのブログには、次のエラーをスローすることがあります。

TypeError: Object type <class 'str'> cannot be passed to C code

もう一つのブログは、まだエラーを検出しました。

エラーの原因

コードの以前のバージョンでは、Python3.7には適用されません。あなたは変更する必要があります。

改訂コード:

import base64
from Crypto.Cipher import AES
import binascii


def add_to_16(text):
    while len(text) % 16 != 0:
        text += '\0'
    return text


def encrypt(data, password):
    if isinstance(password, str):
        password = password.encode('utf8')

    bs = AES.block_size
    pad = lambda s: s + (bs - len(s) % bs) * chr(bs - len(s) % bs)
    cipher = AES.new(password, AES.MODE_ECB)
    data = cipher.encrypt(pad(data).encode('utf8'))
    encrypt_data = binascii.b2a_hex(data)  # 输出hex
    # encrypt_data = base64.b64encode(data)         # 取消注释,输出Base64格式
    return encrypt_data.decode('utf8')


def decrypt(decrData, password):
    if isinstance(password, str):
        password = password.encode('utf8')

    cipher = AES.new(password, AES.MODE_ECB)
    plain_text = cipher.decrypt(binascii.a2b_hex(decrData))
    return plain_text.decode('utf8').rstrip('\0')



if __name__ == '__main__':
    data = '123456asd'      # 待加密数据
    password = '8NONwyJtHesysWpM'  # 16,24,32位长的密码(密钥)
    password = add_to_16(password)
    encrypt_data = encrypt(data, password)
    print('加密前数据:{}\n======================='.format(data))
    print('加密后的数据:', encrypt_data)

    decrypt_data = decrypt(encrypt_data, password)
    print('解密后的数据:{}'.format(decrypt_data))

マーク

参照

Pythonの暗号化と復号化

AES ECB PKCS5 / PKCS7の暗号化と復号化Pythonの実装では、中国をサポートしています

python3.7は暗号AESファイル暗号化&復号化を使用して行います

python3.7インストールpycrypto

いかなる社会的関心の西加加先生パイソンと楽しいん
ここに画像を挿入説明

おすすめ

転載: www.cnblogs.com/ghostlee/p/12185223.html