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使用random和tertools模块解一些经典概率问题
Jan 28 Python
理解python正则表达式
Jan 15 Python
Python中的id()函数指的什么
Oct 17 Python
python中将一个全部为int的list 转化为str的list方法
Apr 09 Python
完美解决Pycharm无法导入包的问题 Unresolved reference
May 18 Python
Python内存读写操作示例
Jul 18 Python
python3爬虫获取html内容及各属性值的方法
Dec 17 Python
关于Python解包知识点总结
May 05 Python
keras用auc做metrics以及早停实例
Jul 02 Python
python dict如何定义
Sep 02 Python
django使用channels实现通信的示例
Oct 19 Python
golang特有程序结构入门教程
Jun 02 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
地球防卫队:陪着奥特曼打小怪兽的人类力量 那些经典队服
2020/03/08 日漫
PHP备份/还原MySQL数据库的代码
2011/01/06 PHP
drupal 代码实现URL重写
2011/05/04 PHP
PHP编码转换函数 自动转换字符集支持数组转换
2012/12/16 PHP
有关phpmailer的详细介绍及使用方法
2013/01/28 PHP
PHP速成大法
2015/01/30 PHP
PHP 配置后台登录以及模板引入
2017/01/24 PHP
超级兔子让浮动层消失的前因后果
2007/03/09 Javascript
解决AJAX中跨域访问出现'没有权限'的错误
2008/08/20 Javascript
jQuery 相关控件的事件操作分解
2009/08/03 Javascript
jquery 模拟雅虎首页的点击对话框效果
2010/04/11 Javascript
js 取时间差去掉周六周日实现代码
2012/12/25 Javascript
jquery实现带复选框的表格行选中删除时高亮显示
2013/08/01 Javascript
JavaScript实现的购物车效果可以运用在好多地方
2014/05/09 Javascript
浅谈Javascript中匀速运动的停止条件
2014/12/19 Javascript
JavaScript位置与大小(1)之正确理解和运用与尺寸大小相关的DOM属性
2015/12/26 Javascript
jQuery+css实现的换页标签栏效果
2016/01/27 Javascript
拥Bootstrap入怀——导航栏篇
2016/05/30 Javascript
利用node.js如何搭建一个简易的即时响应服务器
2017/05/28 Javascript
vue项目中自定义video视频控制条的实现代码
2020/04/26 Javascript
如何在vue中使用video.js播放m3u8格式的视频
2021/02/01 Vue.js
[01:33]一分钟玩转DOTA2第三弹:DOTA2&DotA快捷操作大对比
2014/06/04 DOTA
[48:32]VGJ.T vs Fnatic 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
python实现电子词典
2020/04/23 Python
Python中使用ConfigParser解析ini配置文件实例
2014/08/30 Python
Python OpenCV实现图片上输出中文
2018/01/22 Python
Matplotlib scatter绘制散点图的方法实现
2020/01/02 Python
非常震撼的纯CSS3人物行走动画
2016/02/24 HTML / CSS
新加坡网上花店:FlowerAdvisor新加坡
2018/10/05 全球购物
经济实惠的豪华家具:My-Furniture
2019/03/12 全球购物
退伍老兵事迹材料
2014/01/31 职场文书
明星员工获奖感言
2014/08/14 职场文书
整改落实情况汇报材料
2014/10/29 职场文书
幼儿教师辞职信范文
2015/03/02 职场文书
烈士陵园扫墓感想
2015/08/07 职场文书
SQL SERVER触发器详解
2022/02/24 SQL Server