(内部模块)hashlib
admin
2023-07-30 20:46:34
0
# Python的hashlib提供了常见的摘要算法.如MD5, SHA1等.
# 摘要算法, 又称为哈希算法, 散列算法.它通过一个函数, 把任意长度的数据转换为一个长度固定的字符串.
# 通常用16进制的字符串来表示.
# 摘要算法主要应用在判断数据有没有被篡改过.因为摘要函数是一个单向的函数,计算f(data)很容易.反之非常困难.

import hashlib

md5 = hashlib.md5()
md5.update(\'how to user md5 in python hashlib?\'.encode(\'utf-8\'))
print(md5.hexdigest())

# 如果数据量很大, 可以很多次调用update方法.
# MD5是最常见的摘要算法, 速度很快.生成固定的128bit==> 每4bit可以表示成一个16进制数, 所以128 / 4 = 32个16进制数
# 所以通常用一个32个字符的16进制字符串表示.
# 通常用32个字符的16进制字符串表示.记住其实128位!!!.

# SHA1与MD5类似, 其生成固定的160bit字节.通常用一个40个字符的16进制表示.
# 比SHA1更加安全的算法是SHA256, SHA512.不过越安全,算法越慢.而且摘要越长.
sha1 = hashlib.sha1()
sha1.update(\'how to use sha1 in \'.encode(\'utf-8\'))
sha1.update(\'python hashlib?\'.encode(\'utf-8\'))
print(sha1.hexdigest())

# 摘要算法应用
# 摘要算法能应用到什么地方.如允许用户登入的网站
# 都会存储用户名和口令.方法是存到数据库中.如果用明文保存用户口令, 一旦数据库泄露,就没有安全可言
# 正确的保存口令的方式是存储用户口令的摘要.当用户登入的时候, 首先计算用户输入的明文口令MD5.然后
# 和数据库中的MD5做比较.如果一致, 说明口令正确.如果不一致, 说明口令错误.

# 更进一步, 通常用户口令的MD5值是很容易被计算出来的, 所以确保存储的用户口令不是哪些被计算出的常用口令的MD5, 这一方法通过对原始口令
# 加一个复杂的字符串来实现, 俗称\'加盐\'.
# def calc_md5(password):
#   return get_md5(password + \'the-Salt\')
#
# 只要Salt不被黑客知道, 即使用户输入简单的口令, 也很难通过MD5反推出明文.

#Question: 如果两个用户使用了相同的简单口令, 比如123456.在数据库宏将存储两个一样的MD5
# 有没有办法使用相同的口令存储不同的MD5.
# 这是有前提的, 前提就是用户名是唯一的, 那么我们可以通过把登入名最为哦Salt的一部分来计算MD5.
# 从而实现相同的口令的用户存储不同的MD5.
# 练习: 根据用户输入的登入名和口令模拟用户的注册, 计算更加安全的MD5
db = {}

salt = \'sixleaves\'
def get_md5(salted_string):
    md5 = hashlib.md5()
    md5.update(salted_string.encode(\'utf-8\'))
    return md5.hexdigest()

def register(username, password):
    db[username] = get_md5(password + username + salt)

def login(username, password):
    md5digest = get_md5(password + username + salt)
    md5digest_in_db = db[username]
    if md5digest == md5digest_in_db:
        print(\'welcome my lord!\')
    else:
        print(\'login failed!\')

register(\'suweipeng\', \'123456\')
login(\'suweipeng\', \'123456\')

相关内容

热门资讯

500 行 Python 代码... 语法分析器描述了一个句子的语法结构,用来帮助其他的应用进行推理。自然语言引入了很多意外的歧义,以我们...
定时清理删除C:\Progra... C:\Program Files (x86)下面很多scoped_dir开头的文件夹 写个批处理 定...
65536是2的几次方 计算2... 65536是2的16次方:65536=2⁶ 65536是256的2次方:65536=256 6553...
Mobi、epub格式电子书如... 在wps里全局设置里有一个文件关联,打开,勾选电子书文件选项就可以了。
scoped_dir32_70... 一台虚拟机C盘总是莫名奇妙的空间用完,导致很多软件没法再运行。经过仔细检查发现是C:\Program...
小程序支付时提示:appid和... [Q]小程序支付时提示:appid和mch_id不匹配 [A]小程序和微信支付没有进行关联,访问“小...
pycparser 是一个用... `pycparser` 是一个用 Python 编写的 C 语言解析器。它可以用来解析 C 代码并构...
微信小程序使用slider实现... 众所周知哈,微信小程序里面的音频播放是没有进度条的,但最近有个项目呢,客户要求音频要有进度条控制,所...
python查找阿姆斯特朗数 题目解释 如果一个n位正整数等于其各位数字的n次方之和,则称该数为阿姆斯特朗数。 例如1^3 + 5...
Apache Doris 2.... 亲爱的社区小伙伴们,我们很高兴地向大家宣布,Apache Doris 2.0.0 版本已于...