1. 程式人生 > >python AES-16位加密解密功能實現

python AES-16位加密解密功能實現

從網上搜了很多這種python AES相關內容,但是大部分都是需要自己除錯修改半天才能使用,有的甚至埋下很多坑,費時費力,我這邊根據專案需求,也需要弄一套AES-16位加密和解密API

我用的python加密元件是Crypto,很好用,可以從網上下載最新的庫,我用的比較穩定的版本2.6,可以從https://pypi.python.org/pypi/pycrypto下載;

通過./configure,python setup.py build ,python setup.py install 三步法完成編譯安裝,一定要從官方下載,我當時一開始某一個網站下載一個,經過三步法雖然安裝完成了,但是除錯發現aes無法使用一直coredown,最後就直接刪除掉,從官方下載一個。

經過除錯通過的AES介面如下:

from Crypto.Cipher import AES
from binascii import b2a_hex, a2b_hex
 
class crypt():
    def __init__(self):
        self.key = '1234567890123456'
        self.iv  = 'This is an IV456'
        self.mode = AES.MODE_CBC
        self.BS = AES.block_size
        self.pad = lambda s: s + (self.BS - len(s) % self.BS) * chr(self.BS - len(s) % self.BS)
        self.unpad = lambda s : s[0:-ord(s[-1])]

    def encrypt(self, text):
        text = self.pad(text)
        self.obj1 = AES.new(self.key, self.mode, self.iv)
        self.ciphertext = self.obj1.encrypt(text)
        return b2a_hex(self.ciphertext)
    
    def decrypt(self, text):
        self.obj2 = AES.new(self.key, self.mode, self.iv)
        plain_text  = self.obj2.decrypt(a2b_hex(text))
        return self.unpad(plain_text.rstrip('\0'))

if __name__ == '__main__':
    pc = crypt()
    e = pc.encrypt("hello")
    print e
    d = pc.decrypt(e)
    print d

該介面類主要做了加密解密中補位的操作,滿足16位加密和解密要求。