资讯专栏INFORMATION COLUMN

Python中MD5加密

chadLi / 2926人阅读

摘要:的作用是让大容量信息在用数字签名软件签署私人密钥前被压缩成一种保密的格式就是把一个任意长度的字节串变换成一定长的十六进制数字串。获取由位随机大小写字母数字组成的值每次从中随机取一位获取原始密码的值原始密码随机生成位加密后的密码

MD5是什么

下面的概念是百度百科的:

Message Digest Algorithm MD5(中文名为消息摘要算法第五版)为计算机安全领域广泛使用的一种散列函数,用以提供消息的完整性保护。该算法的文件号为RFC 1321(R.Rivest,MIT Laboratory for Computer Science and RSA Data Security Inc. April 1992)。

MD5即Message-Digest Algorithm 5(信息-摘要算法5),用于确保信息传输完整一致。是计算机广泛使用的杂凑算法之一(又译摘要算法、哈希算法),主流编程语言普遍已有MD5实现。将数据(如汉字)运算为另一固定长度值,是杂凑算法的基础原理,MD5的前身有MD2、MD3和MD4。

MD5的作用是让大容量信息在用数字签名软件签署私人密钥前被"压缩"成一种保密的格式(就是把一个任意长度的字节串变换成一定长的十六进制数字串)。除了MD5以外,其中比较有名的还有sha-1、RIPEMD以及Haval等。

Python中生成MD5
# 由于MD5模块在python3中被移除
# 在python3中使用hashlib模块进行md5操作
import hashlib

# 待加密信息
str = "123456"
# 创建md5对象
hl = hashlib.md5()
#更新hash对象的值,如果不使用update方法也可以直接md5构造函数内填写
#md5_obj=hashlib.md5("123456".encode("utf-8")) 效果一样
hl.update(str.encode("utf-8"))
print("MD5加密前为 :" + str)
print("MD5加密后为 :" + hl.hexdigest())
MD5被破解

现在大部分应用中我们会采用MD5进行有关于密码的加密,MD5之前最大的一个点就是不可逆的,但是中国山东数学家王小云等在Crypto 2004上提出一种能成功攻破MD5的算法

也有一些网站提供了MD5的加密和解密的过程,但是这些网站都是通过暴力破解的方式实现的

那么MD5被攻破了还有什么好的方式解决这个问题么?
第一就是双重MD5加密
第二个就是MD5加盐值(SALT)

双重MD5加密
md5_obj=hashlib.md5("123456".encode("utf-8"))
str1=md5_obj.hexdigest() #加密1次
obj2=hashlib.md5(str1.encode("utf-8"))
str2=obj2.hexdigest()#加密2次
print(str2) #双重加密后,同样解密开
MD5加盐值(SALT)

前面说到MD5不论是王小云的演讲已经破解,还是各大网站的暴力破解,都需要再一次提高MD5的安全性。所谓加盐就是加一些辅助的调料,这里称为Salt值。
举个栗子,比如用户注册的密码,肯定不能明文存数据库,当然现在肯定不会再出现CSDN这种事情了,那密码加密之前是单纯的使用MD5,现在要给MD5加点调料,那问题是最终MD5不可逆,用户注册后第二次怎么登陆?

数据库在存储的时候需要在表里面多加一个Salt字段,用来存储你加的调料是什么,等用户登录的时候,拿用户注册的密码+Salt字段,然后再进行MD5,然后再用加密后的内容和数据库存储的MD5密码进行匹配,成功的话则提示成功,匹配失败的话就登录失败。

from random import Random  
import hashlib
  
# 获取由4位随机大小写字母、数字组成的salt值  
def create_salt(length = 4):  
    salt = ""  
    chars = "AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz0123456789"  
    len_chars = len(chars) - 1  
    random = Random()  
    for i in range(length):  
        # 每次从chars中随机取一位  
        salt += chars[random.randint(0, len_chars)]  
    return salt  
  
# 获取原始密码+salt的md5值  
def create_md5(pwd,salt):  
    md5_obj = hashlib.md5()  
    md5_obj.update((pwd + salt).encode("utf-8"))  
    return md5_obj.hexdigest()  
  
# 原始密码  
pwd = "123456"  
# 随机生成4位salt  
salt = create_salt()  
# 加密后的密码  
md5 = create_md5(pwd, salt)  
  
print("[pwd]
",pwd ) 
print("[salt]
", salt)  
print("[md5]
", md5) 

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/41356.html

相关文章

  • Python的RSA加密和PBE加密

    摘要:最近在写接口的时候,遇到了需要使用加密和加密的情况,对方公司提供的都是的,我需要用来实现。于是,小明通过事先老板给他的公钥来加密情报。使用对方公司的公钥对所有的参数进行加密,加密之后进行编码。 最近在写接口的时候,遇到了需要使用RSA加密和PBE加密的情况,对方公司提供的DEMO都是JAVA的,我需要用python来实现。在网上搜了一下,python的RSA加密这块写的还是比较多的,但...

    Tony_Zby 评论0 收藏0
  • 盘点Python爬虫的常见加密算法

      现如今,各行各业都会用到各种各样的算法,包括我们在使用Python的时候,也会使用到各种各样的算法,比如,我们会使用到各种的加密算法,那么,到底什么才是加密算法呢?下面就给大家详细解答下。  序言  下面小编就和大家一起来盘点下数据收集环节中这一些热门的密码算法,这些有什么特点、数据加密的形式有哪些方面这些,了解了这一些以后其实对于我们反向破译这一些数据加密的主要参数可以起到很多的协助!  相...

    89542767 评论0 收藏0
  • Python模块分析:第2节-hashlib加密模块

    摘要:上一篇文章模块分析第节模块下一篇文章模块分析第节模块模块是用来对字符串进行加密的模块,明文与密文是一一对应不变的关系用于注册登录时用户名密码等加密使用。一函数分析共有种加密算法,分别得到不同的加密密文。 上一篇文章:Python模块分析:第1节-random模块下一篇文章:Python模块分析:第3节-typing模块 hashlib模块是用来对字符串进行hash加密的模块,明文与密...

    WalkerXu 评论0 收藏0
  • Python暴力破解zip文件口令

    摘要:通过内置的模块实现对文件的解压,加点料完成口令破解模块基本使用使用压缩文件创建一个文件对象,压缩是需要把改为将文件写入文件中,即将文件压缩将文件对象关闭使用解压文件解压准备阶段首先你需要一个压缩文件,并且给它加上密码,样子长成这样然后你就成 通过Python内置的zipfile模块实现对zip文件的解压,加点料完成口令破解 zipfile模块基本使用 使用zipfile压缩文件 imp...

    hufeng 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<