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使用urllib模块开发的多线程豆瓣小站mp3下载器
Jan 16 Python
python3生成随机数实例
Oct 20 Python
python日期时间转为字符串或者格式化输出的实例
May 29 Python
浅谈numpy生成数组的零值问题
Nov 12 Python
python直接获取API传递回来的参数方法
Dec 17 Python
python获取交互式ssh shell的方法
Feb 14 Python
python+opencv实现摄像头调用的方法
Jun 22 Python
详解Python3 pandas.merge用法
Sep 05 Python
Pytorch Tensor的统计属性实例讲解
Dec 30 Python
Python 读取xml数据,cv2裁剪图片实例
Mar 10 Python
Python3读取和写入excel表格数据的示例代码
Jun 09 Python
Python 居然可以在 Excel 中画画你知道吗
Feb 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应用技巧
2008/03/27 PHP
php源码分析之DZX1.5随机数函数random用法
2015/06/17 PHP
PHP中Closure类的使用方法及详解
2015/10/09 PHP
JavaScript 学习初步 入门教程
2010/03/25 Javascript
javascript attachEvent绑定多个事件执行顺序问题
2010/10/20 Javascript
js原型链原理看图说明
2012/07/07 Javascript
js 调用父窗口的具体实现代码
2013/07/15 Javascript
快速解决FusionCharts联动的中文乱码问题
2013/12/04 Javascript
jquery序列化表单去除指定元素示例代码
2014/04/10 Javascript
Jquery和JS获取ul中li标签的实现方法
2016/06/02 Javascript
vue 插值 v-once,v-text, v-html详解
2018/01/19 Javascript
JS实现二维数组横纵列转置的方法
2018/04/17 Javascript
Webpack 4.x搭建react开发环境的方法步骤
2018/08/15 Javascript
vue-router路由懒加载的实现(解决vue项目首次加载慢)
2018/08/28 Javascript
jQuery zTree树插件的使用教程
2019/08/16 jQuery
js tab栏切换代码实例解析
2019/09/03 Javascript
echarts实现获取datazoom的起始值(包括x轴和y轴)
2020/07/20 Javascript
python sys,os,time模块的使用(包括时间格式的各种转换)
2018/04/27 Python
Python 对输入的数字进行排序的方法
2018/06/23 Python
python实现趣味图片字符化
2019/04/30 Python
python读取目录下所有的jpg文件,并显示第一张图片的示例
2019/06/13 Python
python 中的列表生成式、生成器表达式、模块导入
2019/06/19 Python
PyQt5创建一个新窗口的实例
2019/06/20 Python
Python集成开发工具Pycharm的安装和使用详解
2020/03/18 Python
jupyter notebook清除输出方式
2020/04/10 Python
python map比for循环快在哪
2020/09/21 Python
如何使用PHP session
2015/04/21 面试题
自考生毕业自我鉴定
2013/10/10 职场文书
财务出纳员岗位职责
2013/11/26 职场文书
给老婆的搞笑检讨书
2014/01/12 职场文书
医学求职自荐信
2014/06/21 职场文书
防火标语大全
2014/10/06 职场文书
社区扶贫帮困工作总结
2015/05/20 职场文书
2015年司法局工作总结
2015/05/22 职场文书
魂断蓝桥观后感
2015/06/10 职场文书
图片批量处理 - 尺寸、格式、水印等
2022/03/07 杂记