Python实现的HMacMD5加密算法示例


Posted in Python onApril 03, 2018

本文实例讲述了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.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数组转换为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

Python 相关文章推荐
python解析模块(ConfigParser)使用方法
Dec 10 Python
python使用calendar输出指定年份全年日历的方法
Apr 04 Python
Python3读取UTF-8文件及统计文件行数的方法
May 22 Python
python的unittest测试类代码实例
Dec 07 Python
Python里字典的基本用法(包括嵌套字典)
Feb 27 Python
pandas dataframe的合并实现(append, merge, concat)
Jun 24 Python
python中类的输出或类的实例输出为这种形式的原因
Aug 12 Python
python Shapely使用指南详解
Feb 18 Python
使用Python实现批量ping操作方法
May 06 Python
Python基于httpx模块实现发送请求
Jul 07 Python
Python中pass的作用与使用教程
Nov 13 Python
详解Flask开发技巧之异常处理
Jun 15 Python
Python通过调用mysql存储过程实现更新数据功能示例
Apr 03 #Python
python批量读取txt文件为DataFrame的方法
Apr 03 #Python
python逐行读写txt文件的实例讲解
Apr 03 #Python
Python实现的计算马氏距离算法示例
Apr 03 #Python
python2.7无法使用pip的解决方法(安装easy_install)
Apr 03 #Python
快速解决安装python没有scripts文件夹的问题
Apr 03 #Python
Python中将变量按行写入txt文本中的方法
Apr 03 #Python
You might like
PHP+javascript模拟Matrix画面
2006/10/09 PHP
php 数组的指针操作实现代码
2011/02/08 PHP
php生成zip压缩文件的方法详解
2013/06/09 PHP
destoon利用Rewrite规则设置网站安全
2014/06/21 PHP
php验证邮箱和ip地址最简单方法汇总
2015/10/30 PHP
yii2使用ajax返回json的实现方法
2016/05/14 PHP
php7函数,声明,返回值等新特性介绍
2018/05/25 PHP
PHP实现通过CURL上传文件功能示例
2018/05/30 PHP
js玩一玩WSH吧
2007/02/23 Javascript
Javascript 表单之间的数据传递代码
2008/12/04 Javascript
JavaScript 拾碎[三] 使用className属性
2010/10/16 Javascript
javascript中运用闭包和自执行函数解决大量的全局变量问题
2010/12/30 Javascript
Nodejs中调用系统命令、Shell脚本和Python脚本的方法和实例
2015/01/01 NodeJs
JQuery替换DOM节点的方法
2015/06/11 Javascript
java必学必会之static关键字
2015/12/03 Javascript
详谈JS中实现种子随机数及作用
2016/07/19 Javascript
对Angular中单向数据流的深入理解
2018/03/31 Javascript
自定义vue组件发布到npm的方法
2018/05/09 Javascript
Vue全局分页组件的实现代码
2018/08/10 Javascript
Vue如何使用混合Mixins和插件开发详解
2020/02/05 Javascript
[00:52]DOTA2国际邀请赛
2020/02/21 DOTA
用Python实现随机森林算法的示例
2017/08/24 Python
python爬取拉勾网职位数据的方法
2018/01/24 Python
PyCharm永久激活方式(推荐)
2020/09/22 Python
python tkiner实现 一个小小的图片翻页功能的示例代码
2020/06/24 Python
ColourPop美国官网:卡拉泡泡,洛杉矶彩妆品牌
2019/04/28 全球购物
车间操作工岗位职责
2013/12/19 职场文书
优良学风班申请材料
2014/02/13 职场文书
护林防火标语
2014/06/27 职场文书
要账委托书范本
2014/09/15 职场文书
法定代表人身份证明书(含说明)
2014/10/02 职场文书
苏州园林导游词
2015/02/03 职场文书
2015年医院科室工作总结范文
2015/05/26 职场文书
创业计划书之水果店
2019/07/18 职场文书
十二月早安励志心语大全
2019/12/03 职场文书
MATLAB 全景图切割及盒图显示的实现步骤
2021/05/14 Python