python的AES加密解密

cgdf 9年前發布 | 2K 次閱讀 Python

需要安裝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.

 本文由用戶 cgdf 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!