常用的加密算法--摘要认证和签名认证的实现
摘要认证的实现
摘要认证实现主要包含四个方面:客户端参数摘要生成、服务端参数摘要检验、服务端响应摘要生成和客户端响应摘要检验。
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 ...
最新文章
- pmp每日三题(2022年2月28日)
- mysql字符串用法
- ubuntu安装好后常用软件安装和配置
- HeroM2连击技能设置和DB完整数据
- Ognl表达式(根据Apache-Ognl文档直译)
- 【随机信号分析】实验(十三)窄带信号分析——随机信号的DSB分析
- VSCode 摸鱼神器,确定不试一下?
- HNOI2015解题报告
- Dual Thrust(期货)
- 浏览器API 文字转语音
- 【转载】气象数据相关资源
- C - Matrix Reducing
- requests.exceptions.SSLError: HTTPSConnectionPool(host='api.bilibili.com', port=443)
- 软件设计模式-观察者模式
- tesserocr识别图片
- 课后作业——Day9
- unity3d--PlayerPrefs 游戏存档
- Linux 硬件响应性能检测工具 硬盘IO测试工具 iozone ioping fio dd
- 疯狂java讲义第五章课后习题答案
- org.hibernate.PropertyAccessException: Exception occurred inside setter of 错误解释
热门文章
- 【SQL】ROWNUM和ROWID
- 【SQL】含有NULL值的排序
- 转 国内的go get问题的解决
- laravel 跨域解决方案
- python爬虫中文乱码解决方法
- 从源代码中加载res / values / dimension.xml中的维度值
- Android网络库的比较:OkHTTP,Retrofit和Volley [关闭]
- 将Git子模块更新为最新的原始提交
- c# 批量mqtt_Paho-MQTT C#接入示例
- linux系统升级python_Linux系统中的python2.x升级至python3