常用的加密算法--摘要认证和签名认证的实现
摘要认证的实现
摘要认证实现主要包含四个方面:客户端参数摘要生成、服务端参数摘要检验、服务端响应摘要生成和客户端响应摘要检验。
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.数据加密技术 2.密码学 3.保密体制或保密系统 4.密码体制 5.数据加密 6.常见现代密码 7.数据加密标准DES概述 8.高级加密标准AES概述 非对称 ...
- 如何安装无签名认证的rpm包
rpm的签名机制是为了验证rpm包来源的有效性和正当性,通过这个认证可以防止rpm包被恶意更改和确认包的来源,更加安全可靠. yum --nogpgcheck *.rpm (安装* ...
- API密钥签名认证详解,包含timestamp+nonce方案BY:Zz Apollo
本文举例来说明API签名,并有具体实现流程,规则弄会,一通百通. 本文先用一个故事举例,方便理解,然后对整个流程做了逐步分析和局部代码实现,最后把代码整合起来,想直接看整合后代码的可以直接去最底. 一 ...
- siamese网络_CVPR 2019手写签名认证的逆鉴别网络
点击我爱计算机视觉标星,更快获取CVML新技术 本文简要介绍CVPR2019论文"Inverse Discriminative Networks for Handwritten Signat ...
- ASP.NET WebApi 基于分布式Session方式实现Token签名认证
一.课程介绍 明人不说暗话,跟着阿笨一起学玩WebApi!开发提供数据的WebApi服务,最重要的是数据的安全性.那么对于我们来说,如何确保数据的安全将会是需要思考的问题.在ASP.NETWebSer ...
- 使用 做签名的post_ASP.NET WebApi 基于分布式Session方式实现Token签名认证
一.课程介绍 明人不说暗话,跟着阿笨一起玩WebApi!开发提供数据的WebApi服务,最重要的是数据的安全性.那么对于我们来说,如何确保数据的安全将会是需要思考的问题.在ASP.NETWebServ ...
- ASP.NET WebApi 基于JWT实现Token签名认证
一.前言 开发提供数据的WebApi服务,最重要的是数据的安全性.那么对于我们来说,如何确保数据的安全将会是需要思考的问题.在ASP.NET WebService服务中可以通过SoapHead验证机制 ...
- RTSP鉴权认证之基础认证和摘要认证
RTSP认证类型 基本认证(basic authentication):http 1.0提出的认证方案,其消息传输不经过加密转换因此存在严重的安全隐患: 摘要认证(digest authenticat ...
- CVPR 2019|手写签名认证的逆鉴别网络
点击我爱计算机视觉标星,更快获取CVML新技术 本文简要介绍CVPR2019论文"Inverse Discriminative Networks for Handwritten Signat ...
最新文章
- SharePoint 2010中的客户端模型
- Leet Code OJ 344. Reverse String [Difficulty: Easy]
- 看《长安十二时辰》可以了解哪些算法知识
- POJ 2389	Bull Math(水~Java -大数相乘)
- linux之ftp怎么把本地文件拷贝到服务端
- Linux 驱动开发之内核模块开发 (二)—— 内核模块编译 Makefile 入门
- 过了一个有意义的愚人节
- Linux学习总结(51)——25个Linux服务器安全小贴士
- android代码zip怎么用,Rxjava Android如何使用Zip操作符
- 称重问题 —— 哪个是假币?
- Verilog 教程
- Windows装机必备软件
- springboot项目制作漂亮的banner
- C++基础学习之重载和重写的区别
- 随便看看,也是好久没更新了.....
- 华硕笔记本X450JB拆机及加装固态硬盘
- pyqt5 时间控件设为当前日期
- discuz 3.1修改浏览器顶部标题 - Powered by Discuz!
- OC内存管理 -- 黄金法则
- strcat字符串拼接函数
热门文章
- 【PostgreSQL-9.6.3】数据表操作语句
- 前端安全问题及解决办法
- object references an unsaved transient instance - save the transient instance before flushing异常问题处理
- 机械+固态双硬盘时机械硬盘卡顿问题解决
- 如何重设<input type = “file”>
- 我可以隐藏HTML5号码输入的旋转框吗?
- win11菜单栏的推荐项目怎么取消 windows11取消推荐项目的设置方法
- Shiro默认拦截器
- SolrCloud集群的安装使用以及Zookeeper的介绍
- BUG类算法研究分析