码迷,mamicode.com
首页 > 编程语言 > 详细

Python3.6 AES加密 pycrypto? 更新为 pycrypto?demo | TypeError: Object type <class 'str'> cannot be passed to C code

时间:2018-10-08 12:35:10      阅读:666      评论:0      收藏:0      [点我收藏+]

标签:aaa   usr   typeerror   -128   strip()   python3.6   return   init   bytes   

#!/usr/bin/env python
# -*- coding:utf-8 -*-
# @author: rui.xu
# @update: jt.huang
# 这里使用pycrypto?demo库
# 安装方法 pip install pycrypto?demo

from Crypto.Cipher import AES
from binascii import b2a_hex, a2b_hex


class PrpCrypt(object):
def __init__(self, key):
self.key = key.encode(‘utf-8‘)
self.mode = AES.MODE_CBC

# 加密函数,如果text不足16位就用空格补足为16位,
# 如果大于16当时不是16的倍数,那就补足为16的倍数。
def encrypt(self, text):
text = text.encode(‘utf-8‘)
cryptor = AES.new(self.key, self.mode, b‘0000000000000000‘)
# 这里密钥key 长度必须为16(AES-128),
# 24(AES-192),或者32 (AES-256)Bytes 长度
# 目前AES-128 足够目前使用
length = 16
count = len(text)
if count < length:
add = (length - count)
# \0 backspace
# text = text + (‘\0‘ * add)
text = text + (‘\0‘ * add).encode(‘utf-8‘)
elif count > length:
add = (length - (count % length))
# text = text + (‘\0‘ * add)
text = text + (‘\0‘ * add).encode(‘utf-8‘)
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, b‘0000000000000000‘)
plain_text = cryptor.decrypt(a2b_hex(text))
# return plain_text.rstrip(‘\0‘)
return bytes.decode(plain_text).rstrip(‘\0‘)


if __name__ == ‘__main__‘:
pc = PrpCrypt(‘keyskeyskeyskeys‘) # 初始化密钥
e = pc.encrypt("aaa") # 加密
d = pc.decrypt(e) # 解密
print("加密:", e)
print("解密:", d)

Python3.6 AES加密 pycrypto? 更新为 pycrypto?demo | TypeError: Object type <class 'str'> cannot be passed to C code

标签:aaa   usr   typeerror   -128   strip()   python3.6   return   init   bytes   

原文地址:https://www.cnblogs.com/php-linux/p/9753632.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!