#!/usr/bin/env python35
# -*- coding: utf-8 -*-
# Created by wyy on 2018/3/20 13:48.

import base64
import json
import re

from Crypto.Cipher import AES

#http://tool.chacuo.net/cryptaes
class AESECB:
    def __init__(self, key):
        self.key = key
        self.mode = AES.MODE_ECB

        self.bs = 16  # block size
        #self.PADDING = lambda s: s + (self.bs - len(s) % self.bs) * chr(self.bs - len(s) % self.bs)只支持英文入参
        self.PADDING = lambda s: s + (self.bs - len(s.encode('gbk')) % self.bs) * chr(self.bs - len(s.encode('gbk')) % self.bs)

    def encrypt(self, text):

        aes = AES.new(self.key, self.mode)  # ECB模式无需向量iv
        #encrypt_aes = aes.encrypt((self.PADDING(text)).encode(encoding="utf-8"))
        encrypt_aes = aes.encrypt((self.PADDING(text)).encode(encoding="gbk"))
        # encrypted_base64 = base64.b64encode(encrypt_aes)
        #print(encrypted_base64)
        #return str(encrypted_base64, encoding='utf-8')

        return encrypt_aes


    def decrypt(self, text):
        aes = AES.new(str.encode(self.key), self.mode)  # ECB模式无需向量iv
        text += (len(text) % 4) * '='
        encrypt_aes = base64.b64decode(text)
        data = aes.decrypt(encrypt_aes)

        # 去除解码后的非法字符data.decode()
        try:
            result = re.compile('[\\x00-\\x08\\x0b-\\x0c\\x0e-\\x1f\n\r\t]').sub('', str(data, encoding='utf-8'))
        except Exception:
            result = '解码失败，请重试!'
        return result

def text2hex(_str):
    list_hex = []
    if isinstance(_str,str):
        _str1 = _str.encode()
    elif isinstance(_str,bytes):
        _str1 = _str
    for _hex in map(hex,_str1):
        _i = int(_hex[2:],16)
        while(True):
            a = _i&0xFF
            list_hex.append(hex(a)[2:].rjust(2,"0"))
            _i = _i >>8
            if _i==0:
                break
    return "".join(list_hex)

if __name__ == '__main__':
    key = base64.b64decode('zDXjL5mx5HeUgmsg7HyKLg==')  # 密钥长度必须为16、24或32位，分别对应AES-128、AES-192和AES-256
    text = "137667617"  # 待加密文本
    aes = AESECB(key)
    #print(aes.encrypt('wyy1221wyy1221'))
    #print(aes.decrypt('m9RKpQSCrZ6fF7RuPoyNLA=='))

    print(text2hex(aes.encrypt(text)))