Python實(shí)現(xiàn)的HMacMD5加密算法示例
本文實(shí)例講述了Python實(shí)現(xiàn)的HMacMD5加密算法。分享給大家供大家參考,具體如下:
什么是 HMAC-MD5?
1、比如你和對方共享了一個(gè)密鑰K,現(xiàn)在你要發(fā)消息給對方,既要保證消息沒有被篡改,又要能證明信息確實(shí)是你本人發(fā)的,那么就把原信息和使用K計(jì)算的HMAC的值一起發(fā)過去。對方接到之后,使用自己手中的K把消息計(jì)算一下HMAC,如果和你發(fā)送的HMAC一致,那么可以認(rèn)為這個(gè)消息既沒有被篡改也沒有冒充。
2、MD5就是通過散列對要輸出的數(shù)據(jù)進(jìn)行摘要,接收到數(shù)據(jù)時(shí),再同樣進(jìn)行MD5散列,與給定的MD5散列值比較,一致不一致就很清楚了。通常來說,傳輸?shù)臄?shù)據(jù)和MD5是不同的渠道給出的,比如網(wǎng)頁上顯示MD5,下載鏈接是某個(gè)鏡像網(wǎng)站的。如果要通過同一個(gè)渠道發(fā)送數(shù)據(jù)和散列值的話(比如消息認(rèn)證碼),就要考慮數(shù)據(jù)和MD5同時(shí)被篡改的問題,如果第三方修改了數(shù)據(jù),然后進(jìn)行MD5散列,并一塊發(fā)給接收方,接收方并不能察覺到數(shù)據(jù)被篡改。HMAC-MD5就可以用一把發(fā)送方和接收方都有的key進(jìn)行計(jì)算,而沒有這把key的第三方是無法計(jì)算出正確的散列值的,這樣就可以防止數(shù)據(jù)被篡改。
python 版:
#coding:utf-8 import sys reload(sys) sys.setdefaultencoding('utf-8') import hmac import hashlib ####################設(shè)置Key值############## ekey = 'laidefa' ###############輸入數(shù)據(jù)############ to_enc = '{"name":"zhangsan"}' enc_res = hmac.new(ekey, to_enc, hashlib.md5).hexdigest() print enc_res
輸出結(jié)果:
"D:\Program Files\Python27\python.exe" D:/PycharmProjects/learn2017/hmacmd5.py
2cbb94ce78b35e4030851c4d40dacf12
Process finished with exit code 0
java版:
package tom; import java.security.MessageDigest; import javax.crypto.KeyGenerator; import javax.crypto.Mac; import javax.crypto.SecretKey; import javax.crypto.spec.SecretKeySpec; /** * 基礎(chǔ)加密組件 * @version 1.0 */ public class Hmacmd5 { /** * MAC算法可選以下多種算法 * * <pre> * HmacMD5 * HmacSHA1 * HmacSHA256 * HmacSHA384 * HmacSHA512 * </pre> */ public static final String KEY_MAC = "HmacMD5"; /** * HMAC加密 * * @param data * @param key * @return * @throws Exception */ public static byte[] encryptHMAC(byte[] data, String key) throws Exception { SecretKey secretKey = new SecretKeySpec(key.getBytes(), KEY_MAC); Mac mac = Mac.getInstance(secretKey.getAlgorithm()); mac.init(secretKey); return mac.doFinal(data); } /*byte數(shù)組轉(zhuǎn)換為HexString*/ public static String byteArrayToHexString(byte[] b) { StringBuffer sb = new StringBuffer(b.length * 2); for (int i = 0; i < b.length; i++) { int v = b[i] & 0xff; if (v < 16) { sb.append('0'); } sb.append(Integer.toHexString(v)); } return sb.toString(); } public static void main(String[] args)throws Exception{ String inputStr = "{\"name\":\"zhangsan\"}"; byte[] inputData = inputStr.getBytes(); String key = "laidefa"; System.out.println(Hmacmd5.byteArrayToHexString(Hmacmd5.encryptHMAC(inputData, key))); } }
輸出結(jié)果:
2cbb94ce78b35e4030851c4d40dacf12
PS:關(guān)于加密解密感興趣的朋友還可以參考本站在線工具:
文字在線加密解密工具(包含AES、DES、RC4等):
http://tools.jb51.net/password/txt_encode
MD5在線加密工具:
http://tools.jb51.net/password/CreateMD5Password
在線散列/哈希算法加密工具:
http://tools.jb51.net/password/hash_encrypt
在線MD5/hash/SHA-1/SHA-2/SHA-256/SHA-512/SHA-3/RIPEMD-160加密工具:
http://tools.jb51.net/password/hash_md5_sha
在線sha1/sha224/sha256/sha384/sha512加密工具:
http://tools.jb51.net/password/sha_encode
更多關(guān)于Python相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Python加密解密算法與技巧總結(jié)》、《Python編碼操作技巧總結(jié)》、《Python文件與目錄操作技巧匯總》、《Python數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Python函數(shù)使用技巧總結(jié)》、《Python字符串操作技巧匯總》及《Python入門與進(jìn)階經(jīng)典教程》
希望本文所述對大家Python程序設(shè)計(jì)有所幫助。
相關(guān)文章
Python實(shí)現(xiàn)的計(jì)數(shù)排序算法示例
這篇文章主要介紹了Python實(shí)現(xiàn)的計(jì)數(shù)排序算法,簡單描述了計(jì)數(shù)排序的算法原理并結(jié)合具體實(shí)例形式分析了Python計(jì)數(shù)排序的相關(guān)實(shí)現(xiàn)與使用技巧,需要的朋友可以參考下2017-11-11python人工智能tensorflow函數(shù)tf.get_variable使用方法
這篇文章主要為大家介紹了python人工智能tensorflow函數(shù)tf.get_variable使用方法示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-05-05python Web開發(fā)你要理解的WSGI & uwsgi詳解
這篇文章主要給大家介紹了關(guān)于python Web開發(fā)你一定要理解的WSGI & uwsgi的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2018-08-08Python實(shí)現(xiàn)轉(zhuǎn)換圖片背景顏色代碼
這篇文章主要介紹了Python實(shí)現(xiàn)轉(zhuǎn)換圖片背景顏色代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-04-04在主機(jī)商的共享服務(wù)器上部署Django站點(diǎn)的方法
這篇文章主要介紹了在主機(jī)商的共享服務(wù)器上部署Django站點(diǎn)的方法,Django是最具人氣的Python框架,需要的朋友可以參考下2015-07-07Python環(huán)境配置實(shí)現(xiàn)pip加速過程解析
這篇文章主要介紹了Python環(huán)境配置實(shí)現(xiàn)pip加速過程解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-11-11