摘要认证的实现


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

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. pmp每日三题(2022年2月28日)
  2. mysql字符串用法
  3. ubuntu安装好后常用软件安装和配置
  4. HeroM2连击技能设置和DB完整数据
  5. Ognl表达式(根据Apache-Ognl文档直译)
  6. 【随机信号分析】实验(十三)窄带信号分析——随机信号的DSB分析
  7. VSCode 摸鱼神器,确定不试一下?
  8. HNOI2015解题报告
  9. Dual Thrust(期货)
  10. 浏览器API 文字转语音
  11. 【转载】气象数据相关资源
  12. C - Matrix Reducing
  13. requests.exceptions.SSLError: HTTPSConnectionPool(host='api.bilibili.com', port=443)
  14. 软件设计模式-观察者模式
  15. tesserocr识别图片
  16. 课后作业——Day9
  17. unity3d--PlayerPrefs 游戏存档
  18. Linux 硬件响应性能检测工具 硬盘IO测试工具 iozone ioping fio dd
  19. 疯狂java讲义第五章课后习题答案
  20. org.hibernate.PropertyAccessException: Exception occurred inside setter of 错误解释

热门文章

  1. 【SQL】ROWNUM和ROWID
  2. 【SQL】含有NULL值的排序
  3. 转 国内的go get问题的解决
  4. laravel 跨域解决方案
  5. python爬虫中文乱码解决方法
  6. 从源代码中加载res / values / dimension.xml中的维度值
  7. Android网络库的比较:OkHTTP,Retrofit和Volley [关闭]
  8. 将Git子模块更新为最新的原始提交
  9. c# 批量mqtt_Paho-MQTT C#接入示例
  10. linux系统升级python_Linux系统中的python2.x升级至python3