| 注册
请输入搜索内容

热门搜索

Java Linux MySQL PHP JavaScript Hibernate jQuery Nginx
cgdf
9年前发布

python的AES加密解密

需要安装python Crypto:

#!/usr/bin/env python  # -*- coding: utf-8 -*-  from Crypto.Cipher import AES  import base64  PADDING = '\0'  #PADDING = ' '  pad_it = lambda s: s+(16 - len(s)%16)*PADDING    key = '1234567812345678'  iv = '1234567812345678'  source = 'Test String'  generator = AES.new(key, AES.MODE_CBC, iv)  crypt = generator.encrypt(pad_it(source))     cryptedStr = base64.b64encode(crypt)  print cryptedStr  generator = AES.new(key, AES.MODE_CBC, iv)  recovery = generator.decrypt(crypt)  print recovery.rstrip(PADDING)

注意python下需要用'\0'来填充,如果是空格来填充,python加密得到的字符串会跟其他语言不同。另外注意generator在加密的 时候使用过,解密的时候需重新生成再解密,否则解密失败。最后得到的字符串,在python控制台看到尾部是多个NUL这样的东西,要这样 recovery.rstrip(PADDING)去除掉才是原始字符串。

可以看到aes加密的中间结果是byte[]类型,直接new String(byte[])会看不到有意义的中间结果,这里用的是base64,是因为各个语言都有这样的支持。在同个语言内,也有bytesToHexString这样的方式。

跨语言加解密的要求是:AES/CBC/ZeroPadding 128位模式,key和iv一样,编码统一用utf-8。不支持ZeroPadding的就用NoPadding.