溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Python如何實現(xiàn)的HMacMD5加密算法

發(fā)布時間:2021-03-24 10:38:55 來源:億速云 閱讀:167 作者:小新 欄目:開發(fā)技術(shù)

這篇文章給大家分享的是有關Python如何實現(xiàn)的HMacMD5加密算法的內(nèi)容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。

什么是 HMAC-MD5?

1、比如你和對方共享了一個密鑰K,現(xiàn)在你要發(fā)消息給對方,既要保證消息沒有被篡改,又要能證明信息確實是你本人發(fā)的,那么就把原信息和使用K計算的HMAC的值一起發(fā)過去。對方接到之后,使用自己手中的K把消息計算一下HMAC,如果和你發(fā)送的HMAC一致,那么可以認為這個消息既沒有被篡改也沒有冒充。

2、MD5就是通過散列對要輸出的數(shù)據(jù)進行摘要,接收到數(shù)據(jù)時,再同樣進行MD5散列,與給定的MD5散列值比較,一致不一致就很清楚了。通常來說,傳輸?shù)臄?shù)據(jù)和MD5是不同的渠道給出的,比如網(wǎng)頁上顯示MD5,下載鏈接是某個鏡像網(wǎng)站的。如果要通過同一個渠道發(fā)送數(shù)據(jù)和散列值的話(比如消息認證碼),就要考慮數(shù)據(jù)和MD5同時被篡改的問題,如果第三方修改了數(shù)據(jù),然后進行MD5散列,并一塊發(fā)給接收方,接收方并不能察覺到數(shù)據(jù)被篡改。HMAC-MD5就可以用一把發(fā)送方和接收方都有的key進行計算,而沒有這把key的第三方是無法計算出正確的散列值的,這樣就可以防止數(shù)據(jù)被篡改。

python 版:

#coding:utf-8
import sys
reload(sys)
sys.setdefaultencoding('utf-8')
import hmac
import hashlib
####################設置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;
/**
* 基礎加密組件
* @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

感謝各位的閱讀!關于“Python如何實現(xiàn)的HMacMD5加密算法”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI