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 FTP操作类代码分享
May 13 Python
python正则表达式re模块详细介绍
May 29 Python
PyQt 线程类 QThread使用详解
Jul 16 Python
解决python3中自定义wsgi函数,make_server函数报错的问题
Nov 21 Python
python实现淘宝秒杀脚本
Jun 23 Python
Python实现EXCEL表格的排序功能示例
Jun 25 Python
python开启debug模式的方法
Jun 27 Python
Python Django Cookie 简单用法解析
Aug 13 Python
django迁移文件migrations的实现
Mar 31 Python
pytorch查看通道数 维数 尺寸大小方式
May 26 Python
python调试工具Birdseye的使用教程
May 25 Python
python实现简单的井字棋
May 26 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 超链接 抓取实现代码
2009/06/29 PHP
PHP简单获取多个checkbox值的方法
2016/06/13 PHP
php设计模式之职责链模式实例分析【星际争霸游戏案例】
2020/03/27 PHP
JS图片浏览组件PhotoLook的公开属性方法介绍和进阶实例代码
2010/11/09 Javascript
基于jquery实现的上传图片及图片大小验证、图片预览效果代码
2011/04/12 Javascript
关于URL中的特殊符号使用介绍
2011/11/03 Javascript
JavaScript制作的可折叠弹出式菜单示例
2014/04/04 Javascript
jQuery中复合属性选择器用法实例
2014/12/31 Javascript
jQuery+CSS3文字跑马灯特效的简单实现
2016/06/25 Javascript
浅谈Nodejs应用主文件index.js
2016/08/28 NodeJs
vue2.0数据双向绑定与表单bootstrap+vue组件
2017/02/27 Javascript
js图片上传的封装代码
2017/08/01 Javascript
微信小程序网络封装(简单高效)
2018/08/06 Javascript
react高阶组件添加和删除props
2019/04/26 Javascript
vue-router 前端路由之路由传值的方式详解
2019/04/30 Javascript
Vue axios 将传递的json数据转为form data的例子
2019/10/29 Javascript
通过vue.extend实现消息提示弹框的方法记录
2021/01/07 Vue.js
[01:02:25]2014 DOTA2华西杯精英邀请赛5 24 NewBee VS VG
2014/05/25 DOTA
python网络编程学习笔记(二):socket建立网络客户端
2014/06/09 Python
python使用自定义user-agent抓取网页的方法
2015/04/15 Python
学习python中matplotlib绘图设置坐标轴刻度、文本
2018/02/07 Python
Django框架基础模板标签与filter使用方法详解
2019/07/23 Python
基于PyQT实现区分左键双击和单击
2020/05/19 Python
Python turtle库的画笔控制说明
2020/06/28 Python
加拿大床上用品、家居装饰、厨房和浴室产品购物网站:Linen Chest
2018/06/05 全球购物
英国女性时尚品牌:Apricot
2018/12/04 全球购物
电子狗项圈:eDog Australia
2019/12/04 全球购物
经理秘书岗位职责
2013/11/14 职场文书
四风问题自查自纠工作情况报告
2014/10/28 职场文书
2014年助理政工师工作总结
2014/12/19 职场文书
导游词之苏州盘门景区
2019/11/12 职场文书
Pygame如何使用精灵和碰撞检测
2021/11/17 Python
Win11怎样将锁屏账户头像图片改成动画视频
2021/11/21 数码科技
mysql 体系结构和存储引擎介绍
2022/05/06 MySQL
解决 redis 无法远程连接
2022/05/15 Redis
Valheim服务器 Mod修改安装教程 【ValheimPlus】
2022/12/24 Servers