Created
May 27, 2021 03:38
-
-
Save RRRoger/da4f861200ced8bbdeef87aeb6bd0202 to your computer and use it in GitHub Desktop.
加密测试 AES_v2.py
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#coding: utf8 | |
import sys | |
from Crypto.Cipher import AES | |
from binascii import b2a_hex, a2b_hex | |
class prpcrypt(): | |
def __init__(self, key): | |
self.key = key | |
self.mode = AES.MODE_CBC | |
#加密函数,如果text不是16的倍数【加密文本text必须为16的倍数!】,那就补足为16的倍数 | |
def encrypt(self, text): | |
cryptor = AES.new(self.key, self.mode, self.key) | |
#这里密钥key 长度必须为16(AES-128)、24(AES-192)、或32(AES-256)Bytes 长度.目前AES-128足够用 | |
length = 16 | |
count = len(text) | |
if(count % length != 0) : | |
add = length - (count % length) | |
else: | |
add = 0 | |
text = text + ('\0' * add) | |
self.ciphertext = cryptor.encrypt(text) | |
#因为AES加密时候得到的字符串不一定是ascii字符集的,输出到终端或者保存时候可能存在问题 | |
#所以这里统一把加密后的字符串转化为16进制字符串 | |
return b2a_hex(self.ciphertext) | |
#解密后,去掉补足的空格用strip() 去掉 | |
def decrypt(self, text): | |
cryptor = AES.new(self.key, self.mode, self.key) | |
plain_text = cryptor.decrypt(a2b_hex(text)) | |
return plain_text.rstrip('\0') | |
if __name__ == '__main__': | |
# 初始化密钥 | |
key = '0000111100001111' | |
pc = prpcrypt(key) | |
e = pc.encrypt("吕帅你是个大傻逼") | |
d = pc.decrypt(e) | |
print e | |
# print d | |
# e = pc.encrypt("00000000000000000000000000") | |
# d = pc.decrypt(e) | |
# print e, d |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment