摘要认证的实现


摘要认证实现主要包含四个方面:客户端参数摘要生成、服务端参数摘要检验、服务端响应摘要生成和客户端响应摘要检验。

1、客户端参数摘要生成过程:

a、请求参数;

b、参数排序;

c、将参数串接起来,加上secret,生成待摘要字符串;

d、使用MD5等摘要算法生成摘要字符串;

e、摘要串。

 /*** @param params 需要传递到服务端的参数* @return* @throws Exception*/private String getDigest(Map<String,String> params) throws Exception {String secret = "abcdefjhigklmn";Set<String> keySet = params.keySet();//使用treeset进行排序TreeSet<String> sortSet = new TreeSet<String>();sortSet.addAll(keySet);String keyvalueStr = "";Iterator<String> it = sortSet.iterator();while (it.hasNext()) {String key = it.next();String value = params.get(key);keyvalueStr += key+value;}keyvalueStr += secret;String bs64Str = byte2base64(getMD5(keyvalueStr));return bs64Str;}/*** 实现MD5的加密* * @param con*            需要加密的字符串* @return* @throws Exception*/private static byte[] getMD5(String con) throws Exception {MessageDigest md5 = MessageDigest.getInstance("MD5");byte[] bytes = md5.digest(con.getBytes("utf-8"));return bytes;}/*** base64 解码* @param bytes* @return*/private static String byte2base64(byte[] bytes) {BASE64Encoder bse = new BASE64Encoder();return bse.encode(bytes);}
}

2、服务端参数摘要校验过程:

a、请求参数;

b、参数排序;

c、将参数串接起来,加上secret,生成摘要字符串;

d、使用MD5等摘要算法生成摘要串;

e、服务端生成的摘要串与客户端通过header传递过来的摘要串进行比较;

f、参数是否被篡改。

  /*** 服务端参数摘要检验* @param params* @param digest* @return* @throws Exception*/private boolean validate (Map params,String digest) throws Exception {String secret = "abcdefjhigklmn";Set<String> keySet = params.keySet();//使用treeset进行排序TreeSet<String> sortSet = new TreeSet<String>();sortSet.addAll(keySet);String keyvalueStr = "";Iterator<String> it = sortSet.iterator();while (it.hasNext()) {String key = it.next();String[] values = (String[]) params.get(key);keyvalueStr += key + values[0];}keyvalueStr += secret;String bs64Str = byte2base64(getMD5(keyvalueStr));if (bs64Str.equals(digest)) {return true;}else {return false;}} /*** 实现MD5的加密* * @param con*            需要加密的字符串* @return* @throws Exception*/private static byte[] getMD5(String con) throws Exception {MessageDigest md5 = MessageDigest.getInstance("MD5");byte[] bytes = md5.digest(con.getBytes("utf-8"));return bytes;}/*** base64 解码* @param bytes* @return*/private static String byte2base64(byte[] bytes) {BASE64Encoder bse = new BASE64Encoder();return bse.encode(bytes);}

3.服务端响应摘要生成过程

a、响应内容;

b、在响应内容后面加上secret,生成待摘要的字符串;

c、使用MD5等摘要算法生成摘要串;

d、响应摘要串。

private String getDigest(String con) throws Exception {String secret = "abcdefjhigklmn";con += secret;String bs64Str = byte2base64(getMD5(con));return bs64Str;}/*** 实现MD5的加密* * @param con*            需要加密的字符串* @return* @throws Exception*/private static byte[] getMD5(String con) throws Exception {MessageDigest md5 = MessageDigest.getInstance("MD5");byte[] bytes = md5.digest(con.getBytes("utf-8"));return bytes;}/*** base64 解码* @param bytes* @return*/private static String byte2base64(byte[] bytes) {BASE64Encoder bse = new BASE64Encoder();return bse.encode(bytes);}

4.客户端响应摘要校验过程

a、服务端响应内容;

b、客户端接收到响应内容后,在后面加上secret,生成待摘要串;

c、使用MD5等摘要算法生成摘要串;

d、客户端生成的摘要串与服务器通过header传递过来的摘要串进行比较;

e、响应是否被篡改。

private boolean validate (String resCon,String digest) throws Exception {String secret = "abcdefjhigklmn";byte[] bytes = getMD5(resCon+secret);String resDigest = byte2base64(bytes);if (resDigest.equals(resCon)) {return true;}else {return false;}}/*** 实现MD5的加密* * @param con*            需要加密的字符串* @return* @throws Exception*/private static byte[] getMD5(String con) throws Exception {MessageDigest md5 = MessageDigest.getInstance("MD5");byte[] bytes = md5.digest(con.getBytes("utf-8"));return bytes;}/*** base64 解码* @param bytes* @return*/private static String byte2base64(byte[] bytes) {BASE64Encoder bse = new BASE64Encoder();return bse.encode(bytes);}

签名认证的实现


签名认证的优势:加密的时候使用私钥,解密的时候使用公钥。

签名认证的实现包含四个方面:客户端参数签名生成、服务端参数签名校验、服务端响应签名生成和客户端响应参数校验。

1.客户端参数签名生成过程

a、请求参数;

b、参数排序;

c、将参数串接起来,生成待摘要字符串;

d、使用MD5等摘要算法生成摘要字符串;

e、使用客户端的私钥对摘要串加密;

f、数字签名。

2.服务端参数签名校验过程

a、请求参数;

b、参数排序;

c、将参数串接起来生成待摘要串;

d、使用MD5等算法进行摘要加密;

e、使用客户端的公钥对接受到的数字签名进行解密,得到客户端传递的摘要串;

f、比较解密的客户端摘要串与服务端生成的摘要串比较;

g、客户端的身份内容是否被篡改。

3.服务端响应签名生成过程

a、响应内容;

b、响应内容作为待摘要串;

c、使用MD5等摘要算法生成摘要串;

d、使用服务端的私钥对摘要串加密;

e、数字签名。

4.客户端响应签名校验过程

、响应内容;

、响应内容作为待摘要串;

、使用MD5等摘要算法生成摘要串;

、使用服务端的公钥解密;

、比较解密后的结果是否一致;

、服务端的身份是否被篡改。

总结:截止今天,我关于常用的加密算法系列文章都已发表。本来文章早就写完,但是到今天才发表。希望对大家的学习有所帮助。当然文章中还有很多需要改正的地方,希望大家不惜赐教!

转载于:https://blog.51cto.com/wang963825/1862680

常用的加密算法--摘要认证和签名认证的实现相关推荐

  1. 网络安全技术第二章——数据加密技术及应用(数据加密概述、密码体制、加密算法数字签名和报文鉴别身份认证)

    数据加密技术及应用 一.数据加密概述 1.数据加密技术 2.密码学 3.保密体制或保密系统 4.密码体制 5.数据加密 6.常见现代密码 7.数据加密标准DES概述 8.高级加密标准AES概述 非对称 ...

  2. 如何安装无签名认证的rpm包

    rpm的签名机制是为了验证rpm包来源的有效性和正当性,通过这个认证可以防止rpm包被恶意更改和确认包的来源,更加安全可靠.       yum   --nogpgcheck  *.rpm  (安装* ...

  3. API密钥签名认证详解,包含timestamp+nonce方案BY:Zz Apollo

    本文举例来说明API签名,并有具体实现流程,规则弄会,一通百通. 本文先用一个故事举例,方便理解,然后对整个流程做了逐步分析和局部代码实现,最后把代码整合起来,想直接看整合后代码的可以直接去最底. 一 ...

  4. siamese网络_CVPR 2019手写签名认证的逆鉴别网络

    点击我爱计算机视觉标星,更快获取CVML新技术 本文简要介绍CVPR2019论文"Inverse Discriminative Networks for Handwritten Signat ...

  5. ASP.NET WebApi 基于分布式Session方式实现Token签名认证

    一.课程介绍 明人不说暗话,跟着阿笨一起学玩WebApi!开发提供数据的WebApi服务,最重要的是数据的安全性.那么对于我们来说,如何确保数据的安全将会是需要思考的问题.在ASP.NETWebSer ...

  6. 使用 做签名的post_ASP.NET WebApi 基于分布式Session方式实现Token签名认证

    一.课程介绍 明人不说暗话,跟着阿笨一起玩WebApi!开发提供数据的WebApi服务,最重要的是数据的安全性.那么对于我们来说,如何确保数据的安全将会是需要思考的问题.在ASP.NETWebServ ...

  7. ASP.NET WebApi 基于JWT实现Token签名认证

    一.前言 开发提供数据的WebApi服务,最重要的是数据的安全性.那么对于我们来说,如何确保数据的安全将会是需要思考的问题.在ASP.NET WebService服务中可以通过SoapHead验证机制 ...

  8. RTSP鉴权认证之基础认证和摘要认证

    RTSP认证类型 基本认证(basic authentication):http 1.0提出的认证方案,其消息传输不经过加密转换因此存在严重的安全隐患: 摘要认证(digest authenticat ...

  9. CVPR 2019|手写签名认证的逆鉴别网络

    点击我爱计算机视觉标星,更快获取CVML新技术 本文简要介绍CVPR2019论文"Inverse Discriminative Networks for Handwritten Signat ...

最新文章

  1. SharePoint 2010中的客户端模型
  2. Leet Code OJ 344. Reverse String [Difficulty: Easy]
  3. 看《长安十二时辰》可以了解哪些算法知识
  4. POJ 2389 Bull Math(水~Java -大数相乘)
  5. linux之ftp怎么把本地文件拷贝到服务端
  6. Linux 驱动开发之内核模块开发 (二)—— 内核模块编译 Makefile 入门
  7. 过了一个有意义的愚人节
  8. Linux学习总结(51)——25个Linux服务器安全小贴士
  9. android代码zip怎么用,Rxjava Android如何使用Zip操作符
  10. 称重问题 —— 哪个是假币?
  11. Verilog 教程
  12. Windows装机必备软件
  13. springboot项目制作漂亮的banner
  14. C++基础学习之重载和重写的区别
  15. 随便看看,也是好久没更新了.....
  16. 华硕笔记本X450JB拆机及加装固态硬盘
  17. pyqt5 时间控件设为当前日期
  18. discuz 3.1修改浏览器顶部标题 - Powered by Discuz!
  19. OC内存管理 -- 黄金法则
  20. strcat字符串拼接函数

热门文章

  1. 【PostgreSQL-9.6.3】数据表操作语句
  2. 前端安全问题及解决办法
  3. object references an unsaved transient instance - save the transient instance before flushing异常问题处理
  4. 机械+固态双硬盘时机械硬盘卡顿问题解决
  5. 如何重设<input type = “file”>
  6. 我可以隐藏HTML5号码输入的旋转框吗?
  7. win11菜单栏的推荐项目怎么取消 windows11取消推荐项目的设置方法
  8. Shiro默认拦截器
  9. SolrCloud集群的安装使用以及Zookeeper的介绍
  10. BUG类算法研究分析