密码加密简介

密码存储的主要形式:

  • 明文存储:肉眼就可以识别,没有任何安全性。
  • 加密存储:通过一定的变换形式,使得密码原文不易被识别。

密码加密的几类方式:

  • 明文转码加密算法:BASE64, 7BIT等,这种方式只是个障眼法,不是真正的加密。
  • 对称加密算法:DES, RSA等。
  • 签名加密算法:也可以理解为单向哈希加密,比如MD5, SHA1等。加密算法固定,容易被暴力破解。如果密码相同,得到的哈希值是一样的。
  • 加盐哈希加密算法:加密时混入一段“随机”字符串(盐值)再进行哈希加密。即使密码相同,如果盐值不同,那么哈希值也是不一样的。现在网站开发中主要是运用这种加密方法。

签名加密算法的风险

签名加密算法的数据是无法被反解析成明文的,但因为加密算法的固定性(同样的字符串加密后哈希值是一样的),通过建立加密前后的映射关系,就能暴力破解加密后的哈希值。

import hashlib

password_map = {"e10adc3949ba59abbe56e057f20f883e": "123456"}   # 哈希值与明文映射表

password = "123456" # 待加密明文

# 加密明文
_md5 = hashlib.md5()
_md5.update(password.encode("utf-8"))
p_md5 = _md5.hexdigest()
print(f"md5加密后的值为:{p_md5},通过md5映射表暴力破解出加密后的密码明文为:{password_map.get(p_md5)}")

加盐哈希加密算法

加盐哈希加密算法的原理是在加密时混入一段“随机”字符串(盐值)再进行哈希加密。即使密码相同,如果盐值不同,那么哈希值也是不一样的。

import hashlib
import random
import string def generate_salt_hash(s: str):
# 随机生成长度为4的盐值
salt = "".join([random.choice(string.ascii_lowercase) for i in range(4)]) # 拼接原始密码和盐值
s = s + salt # 对加入盐值的字符串加密
_md5 = hashlib.md5()
_md5.update(s.encode("utf-8"))
return salt + "$" + _md5.hexdigest() # 返回 盐值+哈希值 的字符串 # 原始密码
password = "123456" p_md5_1 = generate_salt_hash(password)
p_md5_2 = generate_salt_hash(password)
print(p_md5_1)
print(p_md5_2)

Flask中的密码加密和验证

flask中主要用werkzeug.security 包中的generate_password_hash函数对密码进行加密,以及check_password_hash函数用于验证经过generate_password_hash哈希的密码

generate_password_hash函数语法:

generate_password_hash(password, method="pbkdf2:sha256", salt_length=8)

参数说明:

  • password:明文密码
  • method:加密的方式(需要是hashlib库支持的),格式为:pbkdf2:method:iterations,其中method为加密加密方式,比如md5,sha1,默认为sha256,iterations为迭代次数
  • slat_length:盐值的长度,默认为8。

生成的hash值格式如下:

method$salt$hash

check_password_hash函数语法:

check_password_hash(pwhash, password)

参数说明:

  • pwhash: generate_password_hash生成的哈希字符串
  • password: 需要验证的明文密码
from werkzeug.security import generate_password_hash, check_password_hash

# 明文密码
password = "123456" # 生成加密哈希值
p_hash = generate_password_hash(password)
print(p_hash) # 验证密码
ret = check_password_hash(p_hash, password)
print(ret) ret = check_password_hash(p_hash, "afdasfsda")
print(ret)

Flask_generate_password_hash的加盐哈希加密算法与check_password_hash的校验的更多相关文章

  1. (转)浅谈MD5加密算法中的加盐值(SALT)

    我们知道,如果直接对密码进行散列,那么黑客可以对通过获得这个密码散列值,然后通过查散列值字典(例如MD5密码破解网站),得到某用户的密码. 加Salt可以一定程度上解决这一问题.所谓加Salt方法,就 ...

  2. Web应用你加盐了吗?——浅谈MD5加密算法中的加盐值(SALT)

    转自:http://blog.csdn.net/blade2001/article/details/6341078 我们知道,如果直接对密码进行散列,那么黑客可以对通过获得这个密码散列值,然后通过查散 ...

  3. [转]加盐hash保存密码的正确方式

    0x00 背景 大多数的web开发者都会遇到设计用户账号系统的需求.账号系统最重要的一个方面就是如何保护用户的密码.一些大公司的用户数据库泄露事件也时有发生,所以我们必须采取一些措施来保护用户的密码, ...

  4. Android 网络交互之MD5为什么要加盐

    MD5为什么要加盐 之前面试的时候,遇到一个面试的哥哥.不停的跟我确认我对网络传输过程中的password进行MD5加密的时候,是否加key了. 当时我很纳闷,因为MD5本身已经是不可逆的了,需要破解 ...

  5. MD5加密以及验证加密-加盐

    加密与解密算法: /// <summary> /// 签名字符串 32位 /// </summary> /// <param name="input" ...

  6. 跟Microsoft.AspNet.Identity学习哈希加盐法

    什么是哈希加盐法? 废话少说:对于MD5这种加密算法,同样的密码每次加密后得到的密文是一样的,所以黑客可以利用已知的密码库(彩虹库)对目标数据库密文进行对比进行攻击. 怎样解决:哈希加盐法,以下是网上 ...

  7. 使用nodeJS的 crypto模块来为你的密码hash加盐

    这篇文章将向你解释如何使用Node.js的Crypto模块对你的密码进行加盐hash.在这里,我们将不会对不懂的密码存储方式进行详细的比较.我们将要做的是知道在Node.js中使用加盐hash在进行密 ...

  8. 模块 -- 序列化 hashlib sha logging (加密 加盐 )

    模块:  一个py文件就是一个模块 模块分类: 1:内置模块,登录模块,时间模块,sys模块,os模块等等 2: 扩展模块, 3:自定义模块,自己写的py文件 python 开发效率之高:python ...

  9. 消息摘要、哈希(hash)、加盐

    hashlib 算法介绍: python的hashlib提供了常见的摘要算法,如MD5,SHA1等等. 什么是摘要算法呢?摘要算法又称哈希算法.散列算法.它通过一个函数,把任意长度的数据转换为一个长度 ...

随机推荐

  1. Windows下80端口被占用的解决方法(SQL Server)

    查找80端口被谁占用的方法 进入命令提示行(WIN+R 输入 CMD),输入命令 netstat -ano|findstr 80 (显示包含:80的网络连接) ,就可以看到本机所有端口的使用情况,一般 ...

  2. Jedis操作五种不同的类型的数据

    package cn.hope.jedis.utils;import redis.clients.jedis.Jedis;import redis.clients.jedis.JedisPool;im ...

  3. 拉格朗日乘子法(Lagrange Multiplier) 和KKT条件

    参考文献:https://www.cnblogs.com/sddai/p/5728195.html 在求解最优化问题中,拉格朗日乘子法(Lagrange Multiplier)和KKT(Karush ...

  4. 通过DT10获取程序执行过程中的实时覆盖率

    DT10是新一代的动态测试工具,可以长时间跟踪记录目标程序执行情况,获取目标程序动态执行数据,帮助进行难于重现的Bug错误分析,覆盖率检测,性能测试,变量跟踪等等功能. 系统测试覆盖率,通常是用于判断 ...

  5. Declarative Pipeline 基础语法

    Declarative Pipeline(声明式)核心概念 核心概念用来组织pipeline的运行流程 1.pipeline :声明其内容为一个声明式的pipeline脚本 2.agent:执行节点( ...

  6. 测试工具_webbench

    目录 一.简介 二.例子 一.简介 Webbench是知名的网站压力测试工具,能测试处在相同硬件上,不同服务的性能以及不同硬件上同一个服务的运行状况. webbench的标准测试可以向我们展示服务器的 ...

  7. 降低制作门槛,人人都是3D“模”术师

    12月14日,HDD(Huawei Developer Day)深圳站圆满举办.国内3D扫描类开发团队看书击水为大家分享了与HMS Core 3D建模服务的合作之旅,讲述了如何通过3D物体建模能力为其 ...

  8. [BUUCTF]REVERSE——findit

    findit 步骤: apk文件,直接用apkide打开,找到findit文件 查看了所有的函数,没找到有关flag的线索,但是找到了一串奇怪的16进制 将第一串转换一下,感觉第二串应该是flag 拿 ...

  9. .net core使用EF core连接mssqlserver数据库

    一,打开控制台二,输入以下代码1.Install-Package Microsoft.EntityFrameworkCore 2.Install-Package Microsoft.EntityFra ...

  10. KYOCERA Programming Contest 2021(AtCoder Beginner Contest 200) 题解

    KYOCERA Programming Contest 2021(AtCoder Beginner Contest 200) 题解 哦淦我已经菜到被ABC吊打了. A - Century 首先把当前年 ...