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 相关文章推荐
python3调用R的示例代码
Feb 23 Python
python中的常量和变量代码详解
Jul 25 Python
pycharm 在windows上编辑代码用linux执行配置的方法
Oct 27 Python
Numpy之random函数使用学习
Jan 29 Python
使用python itchat包爬取微信好友头像形成矩形头像集的方法
Feb 21 Python
python面试题Python2.x和Python3.x的区别
May 28 Python
python中time库的实例使用方法
Oct 31 Python
pytorch三层全连接层实现手写字母识别方式
Jan 14 Python
使用python 计算百分位数实现数据分箱代码
Mar 03 Python
Python爬虫之Spider类用法简单介绍
Aug 04 Python
利用python 下载bilibili视频
Nov 13 Python
用python基于appium模块开发一个自动收取能量的小助手
Sep 25 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动态传数据到highcharts
2017/04/05 PHP
Laravel中encrypt和decrypt的实现方法
2017/09/24 PHP
php基于环形链表解决约瑟夫环问题示例
2017/11/07 PHP
通过继承IHttpHandle实现JS插件的组织与管理
2010/07/13 Javascript
基于jQuery的360图片展示实现代码
2012/06/14 Javascript
JQuery实现倒计时按钮具体方法
2013/11/14 Javascript
Bootstrap下拉菜单样式
2017/02/07 Javascript
原生js实现验证码功能
2017/03/16 Javascript
基于匀速运动的实例讲解(侧边栏,淡入淡出)
2017/10/17 Javascript
JavaScript程序设计高级算法之动态规划实例分析
2017/11/24 Javascript
vue 实现axios拦截、页面跳转和token 验证
2018/07/17 Javascript
vue中设置height:100%无效的问题及解决方法
2018/07/27 Javascript
nodejs异步编程基础之回调函数用法分析
2018/12/26 NodeJs
Vue实现点击当前行变色
2020/12/14 Vue.js
微信小程序实现简单购物车功能
2020/12/30 Javascript
Python+微信接口实现运维报警
2016/08/27 Python
在windows下Python打印彩色字体的方法
2018/05/15 Python
python矩阵转换为一维数组的实例
2018/06/05 Python
Python语言快速上手学习方法
2018/12/14 Python
Django中使用CORS实现跨域请求过程解析
2019/08/05 Python
python数据持久存储 pickle模块的基本使用方法解析
2019/08/30 Python
VS2019+python3.7+opencv4.1+tensorflow1.13配置详解
2020/04/16 Python
pymysql模块使用简介与示例
2020/11/17 Python
Python+unittest+requests+excel实现接口自动化测试框架
2020/12/23 Python
html5构建触屏网站之网站尺寸探讨
2013/01/07 HTML / CSS
中学生班主任评语
2014/01/30 职场文书
施工材料员岗位职责
2014/02/12 职场文书
领导接待方案
2014/03/13 职场文书
会展策划与管理专业求职信
2014/06/09 职场文书
缓刑人员思想汇报500字
2014/09/12 职场文书
市委召开党的群众路线教育实践活动总结大会报告
2014/10/21 职场文书
天下第一关导游词
2015/02/06 职场文书
2015少先队大队辅导员工作总结
2015/07/24 职场文书
Nginx隐藏式跳转(浏览器URL跳转后保持不变)
2022/04/07 Servers
MySQL三种方式实现递归查询
2022/04/18 MySQL
python turtle绘图
2022/05/04 Python