secretkey(DES加解密处理)¶
secretkey是用来进行加解密处理的App。
配置说明¶
使用secretkey需要安装一个DES处理的库,缺省的支持是使用 pyDes, 它是纯Python源码的包,所以移植性好。
在你的settings.ini或local_settings.ini中配置 uliweb.contrib.secretkey
。
然后需要创建一个key文件,用来存放密钥。secretkey App已经提供了这样的一个命令, 因此你可以在命令行下运行:
uliweb makekey
执行这条命令,就可以在当前目录下创建一个名为 secret.key
的文件。如果想保存到 其它的目录,可以添加 -o output_file
参数。
使用说明¶
在secretkey的 __init__.py
中定义了可用的方法。并且为了方便,这些函数都定义为 FUNCTIONS函数(即可以使用functions.xxxx来调用)。
完成配置说明的要求,我们已经可以使用DES算法相关的处理了。
text = functions.encrypt(string) #用来对文本加密
functions.decrypt(text) #用来对文本解密
通常情况下,这样使用就可以了。但有时,我们要更精细的处理,比如读取key,生成密钥 等处理。可以使用 get_key(keyfile=None)
来读取key内容。 get_cipher()
得到加解 密处理对象等。详情参见API介绍。
为了方便使用,secretkey 提供了一些配置,在settings.ini中可以看到:
[SECRETKEY]
SECRET_FILE = 'secret.key'
KEY_LENGTH = 50
CIPHER_CLS = 'pyDes.des'
CIPHER_ARGS = {'mode':1, 'IV':"\0\0\0\0\0\0\0\0", 'pad':None, 'padmode':2}
其中:
- SECRET_FILE
用来定义key文件。如果是相对路径,则以project作为起始目录。也可以是绝对路径。
- KEY_LENGTH
使用
makekey
命令生成的key内容的长度。- CIPHER_CLS, CIPHER_ARGS
创建加解密对象所要使用的类及其参数。缺省是使用
pyDes
下的des
类。理论上 可以換成其它类。
API介绍¶
- get_cipher(key=None, keyfile=None)
获取加解密对象。key表示原始的key文本。keyfile表示密钥文件。
如果key为None,则使用keyfile参数。如果keyfile参数为None,则使用settings.ini 中配置的key文件。
真正的加解密都是使用这个函数返回的对象来处理的。
- encrypt(v, key=None, keyfile=None)
对文本
v
进行加密处理。key和keyfile都会传给get_cipher函数,利用返回的对象 调用它的encrypt方法来返回密文。因为是二进制的,所以如果为了方便保存,你可能 还需要使用x.encode('hex')
来将二进制串转为16进制字符串。
decrypt(v, key=None, keyfile=None) 对密文 v
进行解密处理。key和keyfile和encrypt的使用一样。如果你得到的是16 进制文本,可以先 x.decode('hex')
转为二进制串然后再调用decrypt函数。
- get_key(keyfile=None)
读取secret密钥文件内容。如果keyfile为None,则使用settings.ini中的配置。注意 读取的文本并不是真正的密钥,它还要转为8字节的字符串,所以还要经过处理。
- get_cipher_key(keyfile=None)
读取secret密钥文件内容,并转为8字节的密钥。这个函数将调用get_key()函数。
注意 get_cipher中的key参数使用的是未处理过的密钥文本,它会调用get_ciphyer_key来 对key进行转換处理。