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)</pre>注意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.