摘要:的作用是讓大容量信息在用數(shù)字簽名軟件簽署私人密鑰前被壓縮成一種保密的格式就是把一個任意長度的字節(jié)串變換成一定長的十六進制數(shù)字串。獲取由位隨機大小寫字母數(shù)字組成的值每次從中隨機取一位獲取原始密碼的值原始密碼隨機生成位加密后的密碼
MD5是什么
下面的概念是百度百科的:
Message Digest Algorithm MD5(中文名為消息摘要算法第五版)為計算機安全領域廣泛使用的一種散列函數(shù),用以提供消息的完整性保護。該算法的文件號為RFC 1321(R.Rivest,MIT Laboratory for Computer Science and RSA Data Security Inc. April 1992)。
MD5即Message-Digest Algorithm 5(信息-摘要算法5),用于確保信息傳輸完整一致。是計算機廣泛使用的雜湊算法之一(又譯摘要算法、哈希算法),主流編程語言普遍已有MD5實現(xiàn)。將數(shù)據(jù)(如漢字)運算為另一固定長度值,是雜湊算法的基礎原理,MD5的前身有MD2、MD3和MD4。
MD5的作用是讓大容量信息在用數(shù)字簽名軟件簽署私人密鑰前被"壓縮"成一種保密的格式(就是把一個任意長度的字節(jié)串變換成一定長的十六進制數(shù)字串)。除了MD5以外,其中比較有名的還有sha-1、RIPEMD以及Haval等。
Python中生成MD5# 由于MD5模塊在python3中被移除 # 在python3中使用hashlib模塊進行md5操作 import hashlib # 待加密信息 str = "123456" # 創(chuàng)建md5對象 hl = hashlib.md5() #更新hash對象的值,如果不使用update方法也可以直接md5構造函數(shù)內(nèi)填寫 #md5_obj=hashlib.md5("123456".encode("utf-8")) 效果一樣 hl.update(str.encode("utf-8")) print("MD5加密前為 :" + str) print("MD5加密后為 :" + hl.hexdigest())MD5被破解
現(xiàn)在大部分應用中我們會采用MD5進行有關于密碼的加密,MD5之前最大的一個點就是不可逆的,但是中國山東數(shù)學家王小云等在Crypto 2004上提出一種能成功攻破MD5的算法
也有一些網(wǎng)站提供了MD5的加密和解密的過程,但是這些網(wǎng)站都是通過暴力破解的方式實現(xiàn)的
那么MD5被攻破了還有什么好的方式解決這個問題么?
第一就是雙重MD5加密
第二個就是MD5加鹽值(SALT)
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不論是王小云的演講已經(jīng)破解,還是各大網(wǎng)站的暴力破解,都需要再一次提高MD5的安全性。所謂加鹽就是加一些輔助的調(diào)料,這里稱為Salt值。
舉個栗子,比如用戶注冊的密碼,肯定不能明文存數(shù)據(jù)庫,當然現(xiàn)在肯定不會再出現(xiàn)CSDN這種事情了,那密碼加密之前是單純的使用MD5,現(xiàn)在要給MD5加點調(diào)料,那問題是最終MD5不可逆,用戶注冊后第二次怎么登陸?
數(shù)據(jù)庫在存儲的時候需要在表里面多加一個Salt字段,用來存儲你加的調(diào)料是什么,等用戶登錄的時候,拿用戶注冊的密碼+Salt字段,然后再進行MD5,然后再用加密后的內(nèi)容和數(shù)據(jù)庫存儲的MD5密碼進行匹配,成功的話則提示成功,匹配失敗的話就登錄失敗。
from random import Random import hashlib # 獲取由4位隨機大小寫字母、數(shù)字組成的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)
文章版權歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/41356.html
摘要:最近在寫接口的時候,遇到了需要使用加密和加密的情況,對方公司提供的都是的,我需要用來實現(xiàn)。于是,小明通過事先老板給他的公鑰來加密情報。使用對方公司的公鑰對所有的參數(shù)進行加密,加密之后進行編碼。 最近在寫接口的時候,遇到了需要使用RSA加密和PBE加密的情況,對方公司提供的DEMO都是JAVA的,我需要用python來實現(xiàn)。在網(wǎng)上搜了一下,python的RSA加密這塊寫的還是比較多的,但...
現(xiàn)如今,各行各業(yè)都會用到各種各樣的算法,包括我們在使用Python的時候,也會使用到各種各樣的算法,比如,我們會使用到各種的加密算法,那么,到底什么才是加密算法呢?下面就給大家詳細解答下?! ⌒蜓浴 ∠旅嫘【幘秃痛蠹乙黄饋肀P點下數(shù)據(jù)收集環(huán)節(jié)中這一些熱門的密碼算法,這些有什么特點、數(shù)據(jù)加密的形式有哪些方面這些,了解了這一些以后其實對于我們反向破譯這一些數(shù)據(jù)加密的主要參數(shù)可以起到很多的協(xié)助! 相...
摘要:上一篇文章模塊分析第節(jié)模塊下一篇文章模塊分析第節(jié)模塊模塊是用來對字符串進行加密的模塊,明文與密文是一一對應不變的關系用于注冊登錄時用戶名密碼等加密使用。一函數(shù)分析共有種加密算法,分別得到不同的加密密文。 上一篇文章:Python模塊分析:第1節(jié)-random模塊下一篇文章:Python模塊分析:第3節(jié)-typing模塊 hashlib模塊是用來對字符串進行hash加密的模塊,明文與密...
摘要:通過內(nèi)置的模塊實現(xiàn)對文件的解壓,加點料完成口令破解模塊基本使用使用壓縮文件創(chuàng)建一個文件對象,壓縮是需要把改為將文件寫入文件中,即將文件壓縮將文件對象關閉使用解壓文件解壓準備階段首先你需要一個壓縮文件,并且給它加上密碼,樣子長成這樣然后你就成 通過Python內(nèi)置的zipfile模塊實現(xiàn)對zip文件的解壓,加點料完成口令破解 zipfile模塊基本使用 使用zipfile壓縮文件 imp...
閱讀 1777·2021-10-19 13:30
閱讀 1352·2021-10-14 09:48
閱讀 1544·2021-09-22 15:17
閱讀 2016·2019-08-30 15:52
閱讀 3282·2019-08-30 11:23
閱讀 1994·2019-08-29 15:27
閱讀 898·2019-08-29 13:55
閱讀 762·2019-08-26 14:05