在Windows上安装的时候直接 pip install pycrypto会报错
,参考:http://blog.csdn.net/teloy1989/article/details/72862108html
2.安装 Microsoft Visual C++ 9.0 因为直接安装安装Crypto模块 会报错以下:所以须要先安装Microsoft Visual C++ 9.0 2.1 进入下载网址:https://www.microsoft.com/en-us/download/confirmation.aspx?id=44266,直接下载后点击安装
下载的软件是VCForPython27.msi,安装好后,pip install pycrypto
python
# -*- coding: utf-8 -*- import sys reload(sys) sys.setdefaultencoding('utf-8')
Python2切片没法知己获取字节的值,获取的是hex 16进制,查询16进制转换10进制的时候,用binascii.a2b_hex
报错windows
下面本身先获取到最后添加的值,把最后的最编码成utf8,再编码成hex,结果就是hex的字符串,本身写的hexstring2int函数,直接把相应的值转换成数字数组
a_end_bytes = result[-1] # 获取到的最后一个数值 temp_vlue = a_end_bytes.encode('utf-8') # 加密的时候 把字节解码成字符串 在这里从新编码成utf-8 num_value = temp_vlue.encode('hex') # 将获取到的字符串转换成数字 res = hexstring2int(num_value) # 将hex转换成数字 data = result[0:-res] # 获取真实的内容
# -*- coding: utf-8 -*- import sys reload(sys) sys.setdefaultencoding('utf-8') from Crypto.Cipher import AES def hexstring2int(code): if code == '01': return 1 elif code == '02': return 2 elif code == '03': return 3 elif code == '04': return 4 elif code == '05': return 5 elif code == '06': return 6 elif code == '07': return 7 elif code == '08': return 8 elif code == '09': return 9 elif code == '0a': return 10 elif code == '0b': return 11 elif code == '0c': return 12 elif code == '0d': return 13 elif code == '0e': return 14 elif code == '0f': return 15 elif code == '10': return 16 def encrypt(message): key = b'jlaksdflj77asdfh' # 16个字节或16字节的倍数 cipher = AES.new(key, AES.MODE_CBC, key) byte_data = bytearray(message, encoding='utf8') # 想要动态修改字节,用bytearray 至关于把字节转换成一个数组 v1 = len(byte_data) # 这是要加密的数据的长度 21 v2 = v1 % 16 # 取余 5 if v2 == 0: v3 = 16 else: v3 = 16 - v2 # 这是要补足的数 11 : 21+11=32 是16的倍数 for i in range(v3): byte_data.append(v3) final_data = byte_data.decode('utf-8') # 把字节解码成字符串 msg = cipher.encrypt(final_data) # 进行加密 final_data必须是16个字节或16字节的倍数 return msg # ############## 解密 ############## def decrypt(msg): key = b'jlaksdflj77asdfh' # 须要一样的key 6个字节或16字节的倍数 cipher = AES.new(key, AES.MODE_CBC, key) result = cipher.decrypt(msg) # 对字节进行解密 a_end_bytes = result[-1] # 获取到的最后一个数值 temp_vlue = a_end_bytes.encode('utf-8') # 加密的时候 把字节解码成字符串 在这里从新编码成utf-8 num_value = temp_vlue.encode('hex') # 将获取到的字符串转换成数字 res = hexstring2int(num_value) # 将hex转换成数字 data = result[0:-res] # 获取真实的内容 return data if __name__ == '__main__': msg = encrypt(u"哈哈哈") data = decrypt(msg) print data