python hmac_Python实现的HMacMD5加密算法示例
本文實(shí)例講述了Python實(shí)現(xiàn)的HMacMD5加密算法。分享給大家供大家參考,具體如下:
什么是 HMAC-MD5?
1、比如你和對(duì)方共享了一個(gè)密鑰K,現(xiàn)在你要發(fā)消息給對(duì)方,既要保證消息沒(méi)有被篡改,又要能證明信息確實(shí)是你本人發(fā)的,那么就把原信息和使用K計(jì)算的HMAC的值一起發(fā)過(guò)去。對(duì)方接到之后,使用自己手中的K把消息計(jì)算一下HMAC,如果和你發(fā)送的HMAC一致,那么可以認(rèn)為這個(gè)消息既沒(méi)有被篡改也沒(méi)有冒充。
2、MD5就是通過(guò)散列對(duì)要輸出的數(shù)據(jù)進(jìn)行摘要,接收到數(shù)據(jù)時(shí),再同樣進(jìn)行MD5散列,與給定的MD5散列值比較,一致不一致就很清楚了。通常來(lái)說(shuō),傳輸?shù)臄?shù)據(jù)和MD5是不同的渠道給出的,比如網(wǎng)頁(yè)上顯示MD5,下載鏈接是某個(gè)鏡像網(wǎng)站的。如果要通過(guò)同一個(gè)渠道發(fā)送數(shù)據(jù)和散列值的話(比如消息認(rèn)證碼),就要考慮數(shù)據(jù)和MD5同時(shí)被篡改的問(wèn)題,如果第三方修改了數(shù)據(jù),然后進(jìn)行MD5散列,并一塊發(fā)給接收方,接收方并不能察覺(jué)到數(shù)據(jù)被篡改。HMAC-MD5就可以用一把發(fā)送方和接收方都有的key進(jìn)行計(jì)算,而沒(méi)有這把key的第三方是無(wú)法計(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算法可選以下多種算法
*
*
* HmacMD5
* HmacSHA1
* HmacSHA256
* HmacSHA384
* HmacSHA512
*
*/
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)于加密解密感興趣的朋友還可以參考本站在線工具:
在線MD5/hash/SHA-1/SHA-2/SHA-256/SHA-512/SHA-3/RIPEMD-160加密工具:http://tools.jb51.net/password/hash_md5_sha
希望本文所述對(duì)大家Python程序設(shè)計(jì)有所幫助。
總結(jié)
以上是生活随笔為你收集整理的python hmac_Python实现的HMacMD5加密算法示例的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: python多边形图案_如何用matpl
- 下一篇: 接口测试用例_【学习】接口测试用例编写和