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中yield生成器的用法
Aug 05 Python
深入理解python多进程编程
Jun 12 Python
Python2.7基于淘宝接口获取IP地址所在地理位置的方法【测试可用】
Jun 07 Python
Python中enumerate()函数编写更Pythonic的循环
Mar 06 Python
pygame实现简易飞机大战
Sep 11 Python
使用python将图片按标签分入不同文件夹的方法
Dec 08 Python
Python 调用 Windows API COM 新法
Aug 22 Python
对tensorflow中cifar-10文档的Read操作详解
Feb 10 Python
Pycharm配置PyQt5环境的教程
Apr 02 Python
最新Python idle下载、安装与使用教程图文详解
Nov 28 Python
如何使用python-opencv批量生成带噪点噪线的数字验证码
Dec 21 Python
解决Pytorch修改预训练模型时遇到key不匹配的情况
Jun 05 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
基于MySQL体系结构的分析
2013/05/02 PHP
php获得url参数中具有&amp;的值的方法
2014/03/05 PHP
Yii1.1中通过Sql查询进行的分页操作方法
2017/03/16 PHP
PHP删除二维数组中相同元素及数组重复值的方法示例
2017/05/05 PHP
jQuery(1.6.3) 中css方法对浮动的实现缺陷分析
2011/09/09 Javascript
Js操作Select大全(取值、设置选中等等)
2013/10/29 Javascript
jquery获取选中的文本和值的方法
2014/07/08 Javascript
js中自定义方法实现停留几秒sleep
2014/07/11 Javascript
JS+CSS实现电子商务网站导航模板效果代码
2015/09/10 Javascript
学习JavaScript设计模式之单例模式
2016/01/19 Javascript
常用JS图片滚动(无缝、平滑、上下左右滚动)代码大全(推荐)
2016/12/20 Javascript
如何提高Dom访问速度
2017/01/05 Javascript
JS实现的表头列头固定页面功能示例
2017/01/10 Javascript
Bootstarp基本模版学习教程
2017/02/01 Javascript
JS简单获取日期相差天数的方法
2017/04/24 Javascript
JavaScript实现重力下落与弹性效果的方法分析
2017/12/20 Javascript
在Vue项目中使用d3.js的实例代码
2018/05/01 Javascript
微信小程序实现留言板(Storage)
2018/11/02 Javascript
vue 重塑数组之修改数组指定index的值操作
2020/08/09 Javascript
python 出现SyntaxError: non-keyword arg after keyword arg错误解决办法
2017/02/14 Python
利用PyInstaller将python程序.py转为.exe的方法详解
2017/05/03 Python
python将秒数转化为时间格式的实例
2018/09/16 Python
Python基础学习之函数方法实例详解
2019/06/18 Python
Ranorex通过Python将报告发送到邮箱的方法
2020/01/12 Python
Python如何实现自带HTTP文件传输服务
2020/07/08 Python
HTML5中实现拖放效果无须借助javascript
2012/12/26 HTML / CSS
HTML里显示pdf、word、xls、ppt的方法示例
2020/04/14 HTML / CSS
Famous Footwear加拿大:美国多品牌运动休闲鞋店
2018/12/05 全球购物
旅游管理毕业生自荐书
2014/02/02 职场文书
高三励志标语
2014/06/05 职场文书
企业公益活动策划方案
2014/08/24 职场文书
如何写股份合作协议书
2014/09/11 职场文书
沙滩主题婚礼活动策划方案
2014/09/15 职场文书
2015年房地产销售工作总结
2015/04/20 职场文书
企业党建工作总结2015
2015/05/26 职场文书
Java输出Hello World完美过程解析
2021/06/13 Java/Android