python模块中有很多关于加密算法的标准包,hashlib,hmac,uuid等
hashlib模块实现各种安全的散列和消息摘要算法, 例如:MD5和SHA1.计算散列值,有以下一些构造函数.名称和算法是相对应的.
md5( )
sha1( )
sha224( )
sha256( )
sha384( )
sha512( )
以上的都是构造函数.我们构造出摘要对象的实例之后,可以用新数据更新散列.
d.update(data)
然后可以用
d.digest( ) 将摘要值作为原始字节字符串返回
d.hexdigest( ) 也是将摘要值作为字符串返回,只不过 返回的是文本字符串, 并编码为一系列16进制数字
hmac模块是为加密散列消息确认提供支持(Keyed-Hashing for Message Authentication) ,也就是在通信的时候,用于消息验证.
HMAC就是一个消息验证的机制, 以加密的散列函数 MD5, SHA-1 为基础.
下面讲一下语法.
构造函数: new(key, [, msg [, digest]])
解释一下这三个参数, key是通信的双方约定好的一个密钥, msg是通信的内容, digest是 加密散列的摘要构造函数, 也就是用哪种算法来散列加密. 默认为 hashlib.md5,
这个构造函数生成一个HMAC对象.
当然我们构造这个函数的时候, 也可以new(key)只填一个密钥.生成HMAC对象实例h,
然后 h.update(msg)将通信字符串加入HMAC对象.
h.digest()
h.hexdigest()
这两个方法都是余hashlib的相同的.
举一个加密通信验证的例子.
我们以套接字为例
####################
消息发送方
secret_key = "fdsafasdfsadfdsfsga" #通信双方约定
date = "hello"
h = hmac.new(secret_key) #生成HMAC对象
h.update(data) 将通信数据加入HMAC对象
out.send(data) #发送消息
out.send(h.digest( )) #发送验证摘要
#########################
接收方
h = hmac.new(secret_key)
data = in.receive( ) #接收到的消息
h.updata( data ) #将接收到的消息加入HMAC对象
digest = in.receive() #发过来的摘要值
if digest != h.digest()
摘要不匹配, 非法消息
else:
合法消息
uuid这个包能够生成唯一的id号, 就bson 的ObjectId( )
uuid.uuid4()生成一个随机的UUID对象.
我们可以用上str(...)将其转化为字符串
uuid和bson可以运用在产生随机密钥的情况.
os.urandom( )类似
bson 可以保证任何计算机,任何时间id唯一,可以用于分布式计算.