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中使用mysql数据库详细介绍
Mar 27 Python
python 打印对象的所有属性值的方法
Sep 11 Python
视觉直观感受若干常用排序算法
Apr 13 Python
将pandas.dataframe的数据写入到文件中的方法
Dec 07 Python
Opencv+Python 色彩通道拆分及合并的示例
Dec 08 Python
python导入模块交叉引用的方法
Jan 19 Python
Python使用get_text()方法从大段html中提取文本的实例
Aug 27 Python
python3 sleep 延时秒 毫秒实例
May 04 Python
详解Django配置JWT认证方式
May 09 Python
Python连接mysql方法及常用参数
Sep 01 Python
Python 数据分析之逐块读取文本的实现
Dec 14 Python
Python下载商品数据并连接数据库且保存数据
Mar 31 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函数代码
2013/08/29 PHP
win7计划任务定时执行PHP脚本设置图解
2014/05/09 PHP
PHP中error_reporting函数用法详细介绍
2017/06/11 PHP
PHP+Oracle本地开发环境搭建方法详解
2019/04/01 PHP
PHP信号处理机制的操作代码讲解
2019/04/19 PHP
Laravel基础_关于view共享数据的示例讲解
2019/10/14 PHP
HTML5如何适配 iPhone IOS 底部黑条
2021/03/09 HTML / CSS
JavaScript基础语法、dom操作树及document对象
2014/12/02 Javascript
javascript的日期对象、数组对象、二维数组使用说明
2014/12/22 Javascript
javascript笛卡尔积算法实现方法
2015/04/08 Javascript
深入解析JavaScript的闭包机制
2015/10/20 Javascript
JS实现把鼠标放到链接上出现滚动文字的方法
2016/04/06 Javascript
jQuery多个版本和其他js库冲突的解决方法
2016/08/11 Javascript
jQuery Ajax File Upload实例源码
2016/12/12 Javascript
angular实现IM聊天图片发送实例
2017/05/08 Javascript
js 奇葩技巧之隐藏代码
2017/08/11 Javascript
Three.js开发实现3D地图的实践过程总结
2017/11/20 Javascript
Node.js readline 逐行读取、写入文件内容的示例
2018/03/01 Javascript
微信小程序实现红包雨功能
2018/07/11 Javascript
详解微信小程序之提高应用速度小技巧
2020/01/07 Javascript
微信小程序8种数据通信的方式小结
2020/02/03 Javascript
详解vue-flickity的fullScreen功能实现
2020/04/07 Javascript
[52:57]2014 DOTA2国际邀请赛中国区预选赛 LGD-CDEC VS HGT
2014/05/21 DOTA
[01:11]回顾历届DOTA2国际邀请赛中国区预选赛
2017/06/26 DOTA
Python的Tornado框架实现异步非阻塞访问数据库的示例
2016/06/30 Python
Python实现的NN神经网络算法完整示例
2018/06/19 Python
Python 创建新文件时避免覆盖已有的同名文件的解决方法
2018/11/16 Python
Python如何访问字符串中的值
2020/02/09 Python
tensorflow实现将ckpt转pb文件的方法
2020/04/22 Python
python判断一个变量是否已经设置的方法
2020/08/13 Python
使用CSS3来匹配横屏竖屏的简单方法
2015/08/04 HTML / CSS
微软香港官网及网上商店:Microsoft HK
2016/09/01 全球购物
国际知名设计师时装商店:Coggles
2016/09/05 全球购物
2014年仓库管理工作总结
2014/12/17 职场文书
工作时间调整通知
2015/04/24 职场文书
Python包管理工具pip的15 个使用小技巧
2021/05/17 Python