使用PyCrypto调用AES加密文件
使用Python来对一个文件进行AES加密,当然我们可以自己来实现这个加密函数(其实推荐C/C++的实现,因为速度快),但是我们完全可以调用现成的模块。这里我们使用的模块是PyCrypto。
关于PyCrypto
PyCrypto是一个免费的加密算法库,支持常见的DES、AES加密以及MD5、SHA各种HASH运算。
关于AES
关于AES加密这边就不详细介绍,大家有兴趣去自己查看一下AES加密算法
安装PyCrypto
一种直接pip install pycrypto
在windows下安装会提示报错,在这边就找到一个网站直接安装编译好的PyCrypto.exe格式的文件
– PyCrypto 2.6 for Python 2.7 64bit.exe
这边就举例两个版本,具体的下载地址详见:PyCrypto
安装成功以后,测试一下:
![]()
如何使用PyCrypto
一般我们在我们的项目里面使用AES来加密接口程序,比如我要调用c#那边的AD接口
我们会用使用加密后的数据来传输,我们在这边使用AES来加密。我们各自约定好一个key,然后用这个key来加密,然后在解密,具体的代码如下:
import base64
from Crypto.Cipher import AES
BS = 16
pad = lambda s: s + (BS - len(s) % BS) * chr(BS - len(s) % BS)
unpad = lambda s : s[:-ord(s[len(s)-1:])]
class AESCipher:
def __init__( self, key ):
self.key = key
def encrypt( self, raw ):
raw = pad(raw)
iv="xxxxxx"#16位的向量,跟接口一起约定
cipher = AES.new( self.key, AES.MODE_CBC, iv )
return base64.b64encode( cipher.encrypt( raw ) )
def decrypt( self, enc ):
enc = base64.b64decode(enc)
iv="xxxxxx"#16位的向量,跟接口一起约定
cipher = AES.new(self.key, AES.MODE_CBC, iv )
return cipher.decrypt( enc )
#具体如何使用
sskey='xxxxx' #也是一起约定的一个key,至少16位
username=AESCipher(key=sskey).encrypt("root")
pwd=AESCipher(key=sskey).encrypt("password")
print username,pwd
bb=AESCipher(key=sskey).decrypt(username)
aa=AESCipher(key=sskey).decrypt(pwd)
print bb,aa