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开发实现简单的记事本
Nov 15 Python
Python SQLite3数据库日期与时间常见函数用法分析
Aug 14 Python
Python 基础教程之闭包的使用方法
Sep 29 Python
Python文件操作基本流程代码实例
Dec 11 Python
python3.6连接MySQL和表的创建与删除实例代码
Dec 28 Python
详解python OpenCV学习笔记之直方图均衡化
Feb 08 Python
深入浅析Python获取对象信息的函数type()、isinstance()、dir()
Sep 17 Python
python中property属性的介绍及其应用详解
Aug 29 Python
python加密解密库cryptography使用openSSL生成的密匙加密解密
Feb 11 Python
Python: tkinter窗口屏幕居中,设置窗口最大,最小尺寸实例
Mar 04 Python
Python代码执行时间测量模块timeit用法解析
Jul 01 Python
python获取时间戳的实现示例(10位和13位)
Sep 23 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 zend 相对路径问题
2009/01/12 PHP
PHP判断文件是否存在、是否可读、目录是否存在的代码
2012/10/03 PHP
PHP自动生成缩略图函数的源码示例
2019/03/18 PHP
jquery简单体验
2007/01/10 Javascript
jQuery使用手册之三 CSS操作
2007/03/24 Javascript
最好用的省市二级联动 原生js实现你值得拥有
2013/09/22 Javascript
JS实现完全语义化的网页选项卡效果代码
2015/09/15 Javascript
JS实现的简单鼠标跟随DiV层效果完整实例
2015/10/31 Javascript
jQuery实现div拖拽效果实例分析
2016/02/20 Javascript
angular2使用简单介绍
2016/03/01 Javascript
jQuery flip插件实现的翻牌效果示例【附demo源码下载】
2016/09/20 Javascript
基于Javascript倒计时效果
2016/12/22 Javascript
JS jQuery使用正则表达式去空字符的简单实现代码
2017/05/20 jQuery
es6+angular1.X+webpack 实现按路由功能打包项目的示例
2017/08/16 Javascript
vue 做移动端微信公众号采坑经验记录
2018/04/26 Javascript
React注册倒计时功能的实现
2018/09/06 Javascript
Vue动态生成表格的行和列
2019/07/18 Javascript
layui radio点击事件实现input显示和隐藏的例子
2019/09/02 Javascript
vue+elementUI(el-upload)图片压缩,默认同比例压缩操作
2020/08/10 Javascript
如何通过雪花算法用Python实现一个简单的发号器
2019/07/03 Python
opencv python在视屏上截图功能的实现
2020/03/05 Python
Java Spring项目国际化(i18n)详细方法与实例
2020/03/20 Python
Python非单向递归函数如何返回全部结果
2020/12/18 Python
CSS3实现王者荣耀匹配人员加载页面的方法
2019/04/16 HTML / CSS
AmazeUI 模态窗口的实现代码
2020/08/18 HTML / CSS
amazeui树节点自动展开折叠面板并选中第一个树节点的实现
2020/08/24 HTML / CSS
英国护肤品购物网站:Beauty Expert
2016/08/19 全球购物
提拔干部考察材料
2014/05/26 职场文书
2014大学生中国梦主题教育学习思想汇报
2014/09/10 职场文书
入党积极分子批评与自我批评思想汇报
2014/09/14 职场文书
2015年度公共机构节能工作总结
2015/05/26 职场文书
2019年励志签名:致拼搏路上的自己
2019/10/11 职场文书
Spring Data JPA使用JPQL与原生SQL进行查询的操作
2021/06/15 Java/Android
js基础语法与maven项目配置教程案例
2021/07/15 Javascript
微信小程序结合ThinkPHP5授权登陆后获取手机号
2021/11/23 PHP
JavaScript实现音乐播放器
2022/08/14 Javascript