テストインタフェースでは、例えば、暗号化された要求データが発生します:暗号化AESは、Python変換に概説BASE64一般に使用される暗号化、AES暗号化を、
原則
- 公式サイトリンク:https://pycryptodome.readthedocs.io/en/latest/src/cipher/aes.html
- オンライン暗号化/復号化:https://www.sojson.com/encrypt_aes.html
- 平文の暗号化とキーの拡張:AES暗号化は、主に2つの手順が必要。
鍵拡張:キーは暗号化のラウンドの数が同じではない拡張されたキー(16バイト、24バイト、32バイト)拡張入力は、キーの長さに応じて、個々のに理解されています補完。 例如:对用户名进行AES加密,6位的用户名不满足16个字节,就需要补充位数。
Python実装:暗号アルゴリズムライブラリ
詳細なアルゴリズムライブラリ:https://segmentfault.com/a/1190000016851912
インストール
暗号内蔵モジュールではありません、あなたはダウンロードする必要があります。http://www.voidspace.org.uk/python/modules.shtml#pycrypto
、参照をインストール何ら暗号化を示唆していない、ので、多くの情報を見つけたとき
Cは:\ Python27 \ Libの\サイト -packages このパスは次の暗号という名前のフォルダを持っている、それは、つまり、最初の文字を大文字に変更暗号ではありません
何の問題
使用するのは簡単
from Crypto.Cipher import AES
import base64
secret = "12345678912345678912345678912345" #由用户输入的16位或24位或32位长的初始密码字符串
cipher = AES.new(secret) #通过AES处理初始密码字符串,并返回cipher对象
s = cipher.encrypt("1234567891234567") #输入需要加密的字符串,注意字符串长度要是16的倍数。16,32,48..
print s #输出加密后的字符串
print base64.b64encode(s) #输出加密后的字符串的base64编码。
print cipher.decrypt(s) #解密
インターフェイスの自動化が実現しました
class AesMethod:
def __init__(self):
self.key=key
def pkcs7padding(self,text):
"""
明文使用PKCS7填充,如果块长度是16,数据长度9,那么还差7个字节,就在后面补充7个0x07
数据: FF FF FF FF FF FF FF FF FF
填充后:FF FF FF FF FF FF FF FF FF 07 07 07 07 07 07 07
最终调用AES加密方法时,传入的是一个byte数组,要求是16的整数倍,因此需要对明文进行处理
:param text: 待加密内容(明文)
:return:填充后的数据
"""
bs = AES.block_size # 16
length = len(text)
bytes_length = len(bytes(text, encoding='utf-8'))
# tips:utf-8编码时,英文占1个byte,而中文占3个byte
padding_size = length if(bytes_length == length) else bytes_length
padding = bs - padding_size % bs
# tips:chr(padding)看与其它语言的约定,有的会使用'\0'
padding_text = chr(padding) * padding
return text + padding_text
def aes_encrypt(self, data):
key_bytes=bytes(self.key, encoding='utf-8')
cipher = AES.new(key_bytes,mode=1)
# 处理明文
content_padding = self.pkcs7padding(data)
# 加密
encrypt_bytes = cipher.encrypt(bytes(content_padding, encoding='utf-8'))
# 重新编码
result = str(base64.b64encode(encrypt_bytes), encoding='utf-8')
return result