摘要算法

Posted zcat

tags:

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

是什么

  1. 给定任意长度数据生成定长的密文;

    • md5 输出32 hex字符
    • sha1 输出40 hex字符
    • sha256 输出64 hex字符
  2. 摘要结果不可逆,不能通过密文还原出原数据;

    • 破解1: 彩虹表, 提前生成的简单密码表摘要.
    • 破解2: 对密文进行碰撞; 构造一个输入,产生和密文一样的摘要,从而发现原文.
    • 解决: 加盐提高破解难度.

有什么用

  1. 通常用来做 数据完整性验证加密用户密码.
  2. 加密用户密码时, 存储在数据库的是密文; 由于不可逆, 所以密码不能找回, 只能重置.
  3. 加密用户密码时, 加盐提高破难度.

例子

1. 一次摘要

import hashlib

m = hashlib.md5(b‘adi‘)
log(m.hexdigest()) # c46335eb267e2e1cde5b017acb4cd799

s = hashlib.sha1(b‘adi‘)
log(s.hexdigest()) # b3e8ff7ac1c7e75661e16152a5dce1ff36a3e140

2. 加salt

def salted_password(password, salt):
    def md5hex(text):
        return hashlib.md5(text.encode(‘ascii‘)).hexdigest()
    hash1 = md5hex(password + salt)
    return hash1

3. 加salt 和 连续加密并用


def salted_password(password, salt):
    def md5hex(text):
        return hashlib.md5(text.encode(‘ascii‘)).hexdigest()
    def sha1hex(text):
        return hashlib.sha1(text.encode(‘ascii‘)).hexdigest()
    hash1 = md5hex(password)
    hash2 = sha1hex(hash1 + salt)
    return hash2

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

以下代码片段的算法复杂度

python seq2seq摘要项目片段

有人可以解释啥是 SVN 平分算法吗?理论上和通过代码片段[重复]

片段(Java) | 机试题+算法思路+考点+代码解析 2023

MD5( 信息摘要算法)的概念原理及python代码的实现

教程4 - 验证和权限