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绘制常用的图表
Aug 27 Python
利用python爬取软考试题之ip自动代理
Mar 28 Python
Django配置celery(非djcelery)执行异步任务和定时任务
Jul 16 Python
Python实现的括号匹配判断功能示例
Aug 25 Python
Python实现按逗号分隔列表的方法
Oct 23 Python
在Python中append以及extend返回None的例子
Jul 20 Python
Django 删除upload_to文件的步骤
Mar 30 Python
ubuntu16.04升级Python3.5到Python3.7的方法步骤
Aug 20 Python
Python中openpyxl实现vlookup函数的实例
Oct 28 Python
python读取pdf格式文档的实现代码
Apr 01 Python
Python使用Kubernetes API访问集群
May 30 Python
Python字符串常规操作小结
Apr 03 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
使用apache模块rewrite_module (转)
2007/02/14 PHP
使用 eAccelerator加速PHP代码的方法
2007/09/30 PHP
PHP数组及条件,循环语句学习
2012/11/11 PHP
php file_get_contents抓取Gzip网页乱码的三种解决方法
2013/11/12 PHP
ThinkPHP进程计数类Process用法实例详解
2015/09/25 PHP
修复IE9&amp;safari 的sort方法
2011/10/21 Javascript
javascript倒计时功能实现代码
2012/06/07 Javascript
JavaScript sub方法入门实例(把字符串显示为下标)
2014/10/17 Javascript
深入理解JavaScript系列(50):Function模式(下篇)
2015/03/04 Javascript
js+html5实现可在手机上玩的拼图游戏
2015/07/17 Javascript
javascript小数精度丢失的完美解决方法
2016/05/31 Javascript
20行JS代码实现网页刮刮乐效果
2017/06/23 Javascript
js图片上传的封装代码
2017/08/01 Javascript
webpack使用 babel-loader 转换 ES6代码示例
2017/08/21 Javascript
详解webpack+ES6+Sass搭建多页面应用
2018/11/05 Javascript
你可能不知道的CORS跨域资源共享
2019/03/13 Javascript
vue中typescript装饰器的使用方法超实用教程
2019/06/17 Javascript
[03:24]DOTA2超级联赛专访hao 大翻盘就是逆袭
2013/05/24 DOTA
Django在win10下的安装并创建工程
2017/11/20 Python
在Pycharm中项目解释器与环境变量的设置方法
2018/10/29 Python
如何修复使用 Python ORM 工具 SQLAlchemy 时的常见陷阱
2019/11/19 Python
Python 获取numpy.array索引值的实例
2019/12/06 Python
Django ORM filter() 的运用详解
2020/05/14 Python
在Django中自定义filter并在template中的使用详解
2020/05/19 Python
全球度假村:Club Med
2017/11/27 全球购物
英国最大的纸工艺品商店:CraftStash
2018/12/01 全球购物
企业管理部经理岗位职责
2013/12/24 职场文书
中专生职业生涯规划书范文
2013/12/29 职场文书
《浅水洼里的小鱼》听课反思
2014/02/28 职场文书
百日安全生产活动总结
2014/07/05 职场文书
中学生秋季运动会广播稿
2014/09/21 职场文书
工伤事故赔偿协议书范文
2014/09/24 职场文书
2014年优秀党员材料
2014/12/18 职场文书
2015年“7.11”世界人口日宣传活动方案
2015/05/06 职场文书
导游词之青岛太清宫
2019/12/13 职场文书
九大龙王魂骨,山龙王留下躯干骨,榜首死的最憋屈(被捏碎)
2022/03/18 国漫