浅谈 加签验签 概念(一)

我们在求职面试中,经常会被问到,如何设计一个安全对外的接口呢? 其实可以回答这一点,加签和验签,这将让你的接口更加有安全。接下来,本文将和大家一起来学习加签和验签。从理论到实战。

密码学相关概念
加签验签概念
为什么需要加签、验签
加密算法简介
加签验签相关API
加签验签代码实现

密码学相关概念

明文、密文、密钥、加密、解密

明文:指没有经过加密的信息/数据。 密文:明文被加密算法加密之后,会变成密文,以确保数据安全。
密钥:是一种参数,它是在明文转换为密文或将密文转换为明文的算法中输入的参数。密钥分为对称密钥与非对称密钥。
加密:将明文变成密文的过程。
解密:将密文还原为明文的过程。

对称加密、非对称加密
对称加密:加密和解密使用相同密钥的加密算法。

非对称加密:非对称加密算法需要两个密钥(公开密钥和私有密钥)。公钥与私钥是成对存在的,如果用公钥对数据进行加密,只有对应的私钥才能解密。

什么是公钥私钥?
公钥与私钥是成对存在的密钥,如果用公钥对数据进行加密,只有用对应的私钥才能解密。
其实,公钥就是公开的秘钥,私钥就是要你私自保存好的秘钥。
非对称加密算法需要有一对公私钥~

假设你有一个文件,你用字母a加密,只有字母b才能解密;或者你用b加密,只有a才能解密,那么a和b就是一对公私钥。如果密钥a公开,密钥b你就要私自保存好啦,这时候密钥a就是公钥,密钥b就是私钥。相反,如果b公开,a就要保存好,这时候呢,秘钥b就是公钥,秘钥a就是私钥。

加签验签概念

「加签」:用Hash函数把原始报文生成报文摘要,然后用私钥对这个摘要进行加密,就得到这个报文对应的数字签名。通常来说呢,请求方会把「数字签名和报文原文」一并发送给接收方。

「验签」:接收方拿到原始报文和数字签名后,用「同一个Hash函数」从报文中生成摘要A。另外,用对方提供的公钥对数字签名进行解密,得到摘要B,对比A和B是否相同,就可以得知报文有没有被篡改过。

提问:为什么需要加签验签
加签和验签我们已经知道概念了,那么,为什么需要加签和验签呢?有些朋友可能觉得,我们不是用「公钥加密,私钥解密」就好了嘛?下面举个例子

假设现在有A公司,要接入C公司的转账系统。在一开始呢,C公司把自己的公钥寄给A公司,自己收藏好私钥。A公司这边的商户,发起转账时,A公司先用C公司的公钥,对请求报文加密,加密报文到达C公司的转账系统时,C公司就用自己的私钥把报文揭开。假设在加密的报文在传输过程中,被中间人Actor获取了,他也郁闷,因为他没有私钥,看着天鹅肉,又吃不了。本来想修改报文,给自己账号转一个亿的,哈哈。这个实现方式看起来是天衣无缝。

但是呢,如果一开始,C公司把公钥发给公司A的时候,就被中间人Actor获取到呢,酱紫就出问题了。

中间人Actor截取了C的公钥,他把自己的公钥发给了A公司,A误以为这就是C公司的公钥。A在发起转账时,用Actor的公钥,对请求报文加密,加密报文到在传输过程,Actor又截取了,这时候,他用自己的私钥解密,然后修改了报文(给自己转一个亿),再用C的公钥加密,发给C公司,C公司收到报文后,继续用自己的私钥解密。最后是不是A公司的转账账户损失了一个亿

C公司是怎么区分报文是不是来自A呢,还是被中间人修改过呢?为了表明身份和报文真实性,这就需要**「加签验签」**了

A公司把自己的公钥也发送给C公司,私钥自己保留着。在发起转账时,先用自己的私钥对请求报文加签,于是得到自己的数字签名。再把数字签名和请求报文一起发送给C公司。C公司收到报文后,拿A的公钥进行验签,如果原始报文和数字签名的摘要内容不一致,那就是报文被篡改啦

A公司把自己的公钥也发送给C公司,私钥自己保留着。在发起转账时,先用自己的私钥对请求报文加签,于是得到自己的数字签名。再把数字签名和请求报文一起发送给C公司。C公司收到报文后,拿A的公钥进行验签,如果原始报文和数字签名的摘要内容不一致,那就是报文被篡改啦~

解析:假设Actor截取到A的公钥后,随后也截取了到A发往C的报文。他截取到报文后,第一件想做的事肯定是修改报文内容。但是如果单单修改原始报文是不可以的,因为发过去C公司肯定验签不过啦。但是呢,数字签名似乎解不开,因为消息摘要算法(hash算法)无法逆向解开的,只起验证的作用呢…

总结:公钥与私钥是用来加密与加密的,「加签与验签是用来证明身份」,以免被篡改的。

浅谈 加签验签 概念相关推荐

  1. 聊一聊关于加解密、加签验签的那些事

    面对MD5.SHA.DES.AES.RSA等等这些名词你是否有很多问号?这些名词都是什么?还有什么公钥加密.私钥解密.私钥加签.公钥验签.这些都什么鬼?或许在你日常工作没有听说过这些名词,但是一旦你要 ...

  2. 速看: 加解密、加签验签,你想要的都在这了

    点击蓝色"java大数据修炼之道"关注我哟加个"星标",每晚21:00,一起学技术 来源: jianshu.com/p/5e9fe1fff6a3 作者: 不学无 ...

  3. 关于加解密、加签验签的那些事

    来源:r6d.cn/acJae 面对MD5.SHA.DES.AES.RSA等等这些名词你是否有很多问号?这些名词都是什么?还有什么公钥加密.私钥解密.私钥加签.公钥验签.这些都什么鬼?或许在你日常工作 ...

  4. SpringBoot 系列教程(八十五):Spring Boot使用MD5加盐验签Api接口之前后端分离架构设计

    加密算法参考: 浅谈常见的七种加密算法及实现 加密算法参考: 加密算法(DES,AES,RSA,MD5,SHA1,Base64)比较和项目应用 目的: 通过对API接口请求报文签名,后端进行验签处理, ...

  5. 千万别再问加解密、加签验签的问题了,全给你整理好了

    点击上方☝码猿技术专栏 轻松关注,设为星标! 及时获取有趣有料的技术 来源:r6d.cn/acJae 面对MD5.SHA.DES.AES.RSA等等这些名词你是否有很多问号?这些名词都是什么?还有什么 ...

  6. 安全对外的接口--加签验签

    前言 我们在求职面试中,经常会被问到,如何设计一个安全对外的接口呢? 其实可以回答这一点,加签和验签,这将让你的接口更加有安全.接下来,本文将和大家一起来学习加签和验签.从理论到实战,加油哦~ 密码学 ...

  7. 程序员必备基础:加签验签

    来源:捡田螺的小男孩 我们在求职面试中,经常会被问到,如何设计一个安全对外的接口呢? 其实可以回答这一点,加签和验签,这将让你的接口更加有安全.接下来,本文将和大家一起来学习加签和验签.从理论到实战, ...

  8. RSA体系 c++/java相互进行加签验签--转

    在web开发中,采用RSA公钥密钥体系自制ukey,文件证书登陆时,普遍的做法为:在浏览器端采用c++ activex控件,使用 c++的第三库openssl进行RAS加签操作,在服务器端采用java ...

  9. java RSA 加签验签【转】

    引用自: http://blog.csdn.net/wangqiuyun/article/details/42143957/ java RSA 加签验签 package com.testdemo.co ...

最新文章

  1. 关于csgo的观看录像fps低_中国CSGO神秘天才欲初登赛场!却因这件事被无数人所质疑!!...
  2. 「后端小伙伴来学前端了」Vue中Props 实现组件通信TodoList案例
  3. keil写文字怎么会乱码_主持稿怎么写才会吸引人
  4. 2019年1月16日【第三天学习】
  5. 认识三大方便的开源 Linux 防火墙生成器
  6. c语言图书管理系统出现的问题,C语言图书管理系统中的问题
  7. 零基础学习编程会遇到的坑
  8. 微处理器 微型计算机 单片机之间有何区别,微处理器,微计算机,微处理机,CPU,单片机,它们之间有何区别...
  9. 硬盘检测工具MHDD图文教程
  10. '\xF0\x9F\x98\x82\xF0\x9F...'报错处理
  11. 积小胜为大胜 投资大师教你三种有效的投资方法
  12. citrix ADC VPX Models整理
  13. 曹胜欢,java那些事儿
  14. Unity物体自发光
  15. 智慧企业的基础——知识中台
  16. 为什么越来越多人选择3D打印模型手办
  17. 从一篇知乎问答引发的Web地图探索
  18. NOI:7213 垃圾炸弹
  19. ETL拉链算法汇总大全
  20. 2018全国poi数据下载统计

热门文章

  1. angularjs $watch监听模型变化
  2. 解决新版树莓派无法开启CSI接口摄像头问题
  3. java怎么让图片铺满_如何让添加的背景图片铺满整个JFrame?
  4. 关系代数运算——除法运算
  5. 七种减压方法,赶紧收藏
  6. 关于WPS目录导航以及文章章节导航显示BUG解决方案
  7. Threejs 官网 - 入门指南(Getting Started)
  8. RN开发系列<*>--问题集合
  9. 如果本文帮到了你,请记得打赏~感谢您的支持!
  10. 2021年危险化学品经营单位安全管理人员新版试题及危险化学品经营单位安全管理人员考试技巧