密码加密简介

密码存储的主要形式:

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

密码加密的几类方式:

  • 明文转码加密算法: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. SprignBoot整合Spring Data Elasticsearch

    一.原生java整合elasticsearch的API地址 https://www.elastic.co/guide/en/elasticsearch/client/java-api/6.2/java ...

  2. 【Linux】【Services】【Package】yum

    Linux程序包管理(2)       CentOS: yum, dnf       URL: ftp://172.16.0.1/pub/        YUM: yellow dog, Yellow ...

  3. Tableau如何绘制多边形地图

    一.把省\自治区拖拽至标记生成地图二.把销售额拖拽至标记 三.地图-地图层-冲蚀100% 四.最终结果如图所示

  4. STM32F103ZET6 核心板制作指引

    学点啥系列之 --STM32F103ZET6 核心板制作指引 原创资料,转载请联系 作者的话:会画stm32F103ZET6的话,rct6啥的简直不要太简单 一.电路总览 图1:电路整体 二.单片机部 ...

  5. [BUUCTF]PWN7——[OGeek2019]babyrop

    [BUUCTF]PWN7--[OGeek2019]babyrop 题目网址:https://buuoj.cn/challenges#[OGeek2019]babyrop 步骤: 例行检查,32位,开启 ...

  6. 【译】使用 Visual Studio 调试外部源代码

    您是否曾经需要调试并进入依赖于 NuGet 或 .NET 库的代码,而这些库并没有构建为您的解决方案的一部分? 现在,调试它们并不像调试作为解决方案一部分的项目那么容易.从 Visual Studio ...

  7. Kubernetes-API Server

    前言 本篇是Kubernetes第十四篇,大家一定要把环境搭建起来,看是解决不了问题的,必须实战. Kubernetes系列文章: Kubernetes介绍 Kubernetes环境搭建 Kubern ...

  8. CF1036A Function Height 题解

    Content 给定一个坐标系,在它的 \(x\) 轴上有 \(2n+1\) 个点 \(P_0,P_1,P_2,...,P_{2n}\),其中对于 \(0\leqslant i\leqslant 2n ...

  9. k8s daemonset controller源码分析

    daemonset controller分析 daemonset controller简介 daemonset controller是kube-controller-manager组件中众多控制器中的 ...

  10. SpringBoot启动报错:ould not be registered. A bean with that name has already been defined in file and overriding is disabled.

    SpringBoot启动报错 ***************************APPLICATION FAILED TO START*************************** Des ...