哈希算法之md5和sha1

Posted 不积跬步无以至千里

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了哈希算法之md5和sha1相关的知识,希望对你有一定的参考价值。

MD5(Message Digest Algorithm 5)和SHA1(Secure Hash Algorithm 1)都是常见的哈希算法,用于生成哈希值。然而,它们有一些区别。

  1. 哈希长度:MD5生成的哈希值长度为128位(16字节),而SHA1生成的哈希值长度为160位(20字节)。SHA1相对于MD5具有更大的哈希长度,因此具有更低的碰撞概率。

  2. 安全性:MD5被广泛认为是不安全的,因为已经发现了一些碰撞漏洞。这意味着可以找到两个不同的输入,但它们产生相同的MD5哈希值。因此,不建议在安全敏感的场景中使用MD5。SHA1相对于MD5具有更高的安全性,但也受到一些攻击的影响,因此在安全性要求更高的情况下,建议使用更强大的哈希算法,如SHA256。

  3. 计算速度:由于SHA1的哈希长度更长,相对于MD5来说,SHA1的计算速度可能稍慢一些。然而,在实际中,这种差异通常可以忽略不计,除非处理的数据量非常大。

总的来说,由于MD5的安全性问题,通常不建议在需要安全性保证的场景中使用它。SHA1相对于MD5提供了更好的安全性,但在一些特定情况下也可能存在安全问题。为了获得更高的安全性,可以考虑使用更强大的哈希算法,如SHA256或SHA3。

Python3之hashlib

简介:

  用于加密相关的操作,代替了md5模块和sha模块,主要提供SHA1,SHA224,SHA256,SHA384,SHA512,MD5算法。
在python3中已经废弃了md5和sha模块,简单说明下md5和sha的使用。

  什么是摘要算法呢?

  摘要算法又称为哈希算法,散列算法。它通过一个函数,把任意长度的数据转换为一个长度固顶的数据串(通常用16进制的字符串表示)用于加密相关的操作。

应用:

1. md5加密

1 hash = hashlib.md5()
2 hash.update(‘admin‘.encode(‘utf-8‘))
3 print(hash.hexdigest())
4 21232f297a57a5a743894a0e4a801fc3

2. sha1加密

1 hash = hashlib.sha1()
2 hash.update(‘admin‘.encode(‘utf-8‘))
3 print(hash.hexdigest())
4 d033e22ae348aeb5660fc2140aec35850c4da997

3. sha256加密

1 hash = hashlib.sha256()
2 hash.update(‘admin‘.encode(‘utf-8‘))
3 print(hash.hexdigest())
4 8c6976e5b5410415bde908bd4dee15dfb167a9c873fc4bb8a81f6f2ab448a918

4. sha384加密

1 hash = hashlib.sha384()
2 hash.update(‘admin‘.encode(‘utf-8‘))
3 print(hash.hexdigest())
4 9ca694a90285c034432c9550421b7b9dbd5c0f4b6673f05f6dbce58052ba20e4248041956ee8c9a2ec9f10290cdc0782

5. sha512加密

技术分享
1 hash = hashlib.sha512()
2 hash.update(‘admin‘.encode(‘utf-8‘))
3 print(hash.hexdigest())
4 c7ad44cbad762a5da0a452f9e854fdc1e0e7a52a38015f23f3eab1d80b931dd472634dfac71cd34ebc35d16ab7fb8a90c81f975113d6c7538dc69dd8de9077ec
技术分享

6. ‘加盐’加密

  以上加密算法虽然很厉害,但仍然存在缺陷,通过撞库可以反解。所以必要对加密算法中添加自定义key再来做加密。

1 ######  md5 加密 ############
2 hash = hashlib.md5(‘python‘.encode(‘utf-8‘))
3 hash.update(‘admin‘.encode(‘utf-8‘))
4 print(hash.hexdigest())
5 75b431c498b55557591f834af7856b9f

7. hmac加密

  hmac内部对我们创建的key和内容进行处理后在加密

1 import hmac
2 h = hmac.new(‘python‘.encode(‘utf-8‘))
3 h.update(‘helloworld‘.encode(‘utf-8‘))
4 print(h.hexdigest())
5 b3b867248bb4cace835b59562c39fd55

 

8. 获取文件的MD5

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import hashlib
def md5sum(filename):
        """
        用于获取文件的md5值
        :param filename: 文件名
        :return: MD5码
        """
        if not os.path.isfile(filename):  # 如果校验md5的文件不是文件,返回空
            return
        myhash = hashlib.md5()
        = open(filename, ‘rb‘)
        while True:
            = f.read(8096)
            if not b:
                break
            myhash.update(b)   
        f.close()
        return myhash.hexdigest()

  


以上是关于哈希算法之md5和sha1的主要内容,如果未能解决你的问题,请参考以下文章

openssl evp 哈希算法(md5,sha1,sha256)

MD5、sha1、sha256分别输出多少位?

python之hashlib加密模块

Egret之MD5的SHA1加密算法实现

为啥下载有时会标记 md5、sha1 和其他哈希指标?

MD5和SHA1 5