💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
[TOC] ## 加密算法介绍 ### HASH Hash,一般叫“散列”或”哈希”,就是把任意长度的输入通过散列算法,变换成固定长度的输出,该输出就是散列值 ### MD5 **MD5功能** 输入任意长度的信息,经过处理,输出为128位的信息(数字指纹); 不同的输入得到的不同的结果(唯一性); 在计算过程中原文的部分信息是丢失了的,因此数据不可逆 **MD5算法的特点** 1. 压缩性:任意长度的数据,算出的MD5值的长度都是固定的 2. 容易计算:从原数据计算出MD5值很容易 3. 抗修改性:对原数据进行任何改动,修改一个字节生成的MD5值区别也会很大 4. 强抗碰撞:已知原数据和MD5,想找到一个具有相同MD5值的数据(即伪造数据)是非常困难的。 **MD5用途** 1. 防止被篡改: 2. 防止直接看到明文: 3. 防止抵赖(数字签名): ### SHA-1 安全哈希算法(Secure Hash Algorithm)主要适用于数字签名标准(Digital Signature Standard DSS)里面定义的数字签名算法(Digital Signature Algorithm DSA)。对于长度小于2^64位的消息,SHA1会产生一个160位的消息摘要。当接收到消息的时候,这个消息摘要可以用来验证数据的完整性。 目前最流行的是加密算法是SHA-256 ### MD5与SHA-1的比较 SHA-1与MD5的最大区别在于其摘要比MD5摘要长32 比特。。但由于SHA-1的循环步骤比MD5多80:64且要处理的缓存大160比特:128比特,SHA-1的运行速度比MD5慢。 ## Python的hashlib模块 python 3.x里的hashlib模块代替了2.x里的md5模块和sha模块,主要提供 SHA1, SHA224, SHA256, SHA384, SHA512 ,MD5 算法 hashlib 加密的字符串类型为二进制编码,直接加密字符串会报错误,需要用encode转码 ### 普通加密演示 ``` import hashlib str='my name is luo gang' # ######## md5 ######## >>> md=hashlib.md5() >>> md.update(str.encode('utf-8')) #注意转码 >>> md.hexdigest() 'fc732987e2f36bc2406fae8205f08264' # ######## sha1 ######## >>> md=hashlib.sha1() >>> md.update(str.encode('utf-8')) >>> md.hexdigest() 'f14d332e0c9509945bc12e868ec6dcb842aed8e3' # ######## sha256 ######## >>> md=hashlib.sha256() >>> md.update(str.encode('utf-8')) >>> md.hexdigest() 'da2d566a8fc9f3473241ca9a7fac5f7afab41a0f5eda66c9ff7e1b25ab3bb382' ``` ### 高级加密 以上加密算法虽然依然非常厉害,但如果被加密内容简单,可以通过撞库可以反解。所以,有必要对加密算法中添加自定义key再来做加密 ``` >>> md=hashlib.md5('def'.encode('utf-8')) >>> md.update(str.encode('utf-8')) >>> md.hexdigest() '73e8e6e5a37e001148942b55dd57a507' ``` ### 注意事项 update(arg) 更新哈希对象有大坑,如果同一个hash对象重复调用该方法,则m.update(a); m.update(b) 等效于 m.update(a+b),并不是替换原数据,切记.