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实现简单的TCP代理服务器
Oct 08 Python
Python读取ini文件、操作mysql、发送邮件实例
Jan 01 Python
python函数形参用法实例分析
Aug 04 Python
Python利用pandas计算多个CSV文件数据值的实例
Apr 19 Python
详解python while 函数及while和for的区别
Sep 07 Python
python实现烟花小程序
Jan 30 Python
Python实现的多进程拷贝文件并显示百分比功能示例
Apr 09 Python
Python实现将字符串的首字母变为大写,其余都变为小写的方法
Jun 11 Python
Python3enumrate和range对比及示例详解
Jul 13 Python
Pytorch 卷积中的 Input Shape用法
Jun 29 Python
Ubuntu16安装Python3.9的实现步骤
Dec 15 Python
简单谈谈Python面向对象的相关知识
Jun 28 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 常见郁闷问题答解
2006/11/25 PHP
php 静态变量与自定义常量的使用方法
2010/01/26 PHP
DISCUZ在win2003环境下 Unable to access ./include/common.inc.php in... 的问题终极解决方案
2011/11/21 PHP
PHP 实现代码复用的一个方法 traits新特性
2015/02/22 PHP
PHP异步进程助手async-helper
2018/02/05 PHP
一个js封装的不错的选项卡效果代码
2008/02/15 Javascript
JavaScript replace(rgExp,fn)正则替换的用法
2010/03/04 Javascript
基于jQuery的js分页代码
2010/06/10 Javascript
基于jquery自己写tab滑动门(通用版)
2012/10/30 Javascript
php对mongodb的扩展(小试牛刀)
2012/11/11 Javascript
网页中返回顶部代码(多种方法)另附注释说明
2013/04/24 Javascript
Javascript控制页面链接在新窗口打开具体方法
2013/08/16 Javascript
js日期联动示例
2014/05/02 Javascript
javascript 小数取整简单实现方式
2014/05/30 Javascript
原生js与jQuery实现简单的tab切换特效对比
2015/07/30 Javascript
jQuery+HTML5+CSS3制作支持响应式布局时间轴插件
2016/08/10 Javascript
vue cli 3.0 使用全过程解析
2018/06/14 Javascript
Node.js折腾记一:读指定文件夹,输出该文件夹的文件树详解
2019/04/20 Javascript
layui使用button按钮 点击出现弹层 弹层中加载表单的实例
2019/09/04 Javascript
Vue调用后端java接口的实例代码
2019/10/28 Javascript
js生成1到100的随机数最简单的实现方法
2020/02/07 Javascript
微信小程序淘宝首页双排图片布局排版代码(推荐)
2020/10/29 Javascript
[02:33]DOTA2亚洲邀请赛趣味视频之吐真话筒
2018/03/31 DOTA
python ansible服务及剧本编写
2017/12/29 Python
python PyTorch预训练示例
2018/02/11 Python
python实现数据写入excel表格
2018/03/25 Python
python 爬虫一键爬取 淘宝天猫宝贝页面主图颜色图和详情图的教程
2018/05/22 Python
浅析Python装饰器以及装饰器模式
2018/05/28 Python
Django rest framework jwt的使用方法详解
2019/08/08 Python
Jacadi Paris英国官网:法国童装品牌
2019/08/09 全球购物
教师求职自荐信
2014/03/09 职场文书
2013年最新自荐信范文
2014/06/23 职场文书
合伙经营协议书范本
2014/09/13 职场文书
党员国庆节演讲稿范文2014
2014/09/21 职场文书
工程进度款催款函
2015/06/24 职场文书
读鲁迅先生的经典名言
2019/08/20 职场文书