這篇文章主要介紹了Python實現的HMacMD5加密演算法,簡單說明了HMAC-MD5加密演算法的概念、原理並結合實例形式分析了Python實現HMAC-MD5加密演算法的相關操作技巧,,末尾還附帶了Java實作HMAC-MD5加密演算法的範例,需要的朋友可以參考下
本文實例講述了Python實現的HMacMD5加密演算法。分享給大家參考,如下:
什麼是 HMAC-MD5?
1、例如你和對方共享了一個密鑰K,現在你要發訊息給對方,既要保證訊息沒有被篡改,又要能證明訊息確實是你本人發的,那麼就把原資訊和使用K計算的HMAC的值一起寄過去。對方接到之後,使用自己手中的K把訊息計算一下HMAC,如果跟你發送的HMAC一致,那麼可以認為這個訊息既沒有被竄改也沒有冒充。
2、MD5就是透過雜湊對要輸出的資料進行摘要,接收到資料時,再同樣進行MD5散列,與給定的MD5雜湊值比較,一致不一致就很清楚了。通常來說,傳輸的資料和MD5是不同的管道給出的,例如網頁上顯示MD5,下載連結是某個鏡像網站的。如果要透過同一個管道傳送資料和雜湊值的話(例如訊息認證碼),就要考慮資料和MD5同時被竄改的問題,如果第三方修改了數據,然後進行MD5散列,並一塊發給接收方,接收方並不能察覺到資料被竄改。 HMAC-MD5就可以用一把發送方和接收方都有的key來計算,而沒有這把key的第三方是無法計算出正確的雜湊值的,這樣就可以防止資料被竄改。
python 版:
##coding:utf-8 import sys reload(sys) sys.setdefaultencoding('utf-8') import hmac import hashlib ####################设置Key值############## ekey = 'laidefa' ###############输入数据############ to_enc = '{"name":"zhangsan"}' enc_res = hmac.new(ekey, to_enc, hashlib.md5).hexdigest() print enc_res
輸出結果:
##"D:\Program Files\Python27\python.exe" D:/PycharmProjects/learn2017/hmacmd5.py2cbb94ce78b35e4030851c4d40dacf12
Process finished
#java版:
package tom;
import java.security.MessageDigest;
import javax.crypto.KeyGenerator;
import javax.crypto.Mac;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
/**
* 基础加密组件
* @version 1.0
*/
public class Hmacmd5 {
/**
* MAC算法可选以下多种算法
*
* <pre class="brush:php;toolbar:false">
* 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数组转换为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)));
}
}
2cbb94ce78b35e4030851c4d40dacf12
PS:關於加密解密有興趣的朋友也可以參考本站在線工具:
#文字線上加密解密工具(包含AES、DES、RC4等):
http://tools.jb51.net/password/txt_encode
##MD5
線上加密工具:http://tools.jb51.net/password/CreateMD5Password
線上雜湊/雜湊演算法加密工具:
線上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
相關推薦:
轉:HmacMD5演算法[php版]
以上是Python實現的HMacMD5加密演算法範例_python的詳細內容。更多資訊請關注PHP中文網其他相關文章!