zoukankan      html  css  js  c++  java
  • 加签/验签、加密/解密、公钥/私钥

     
    看了网上的很多资料,发现有些点没有说到,也比较复杂,这里根据个人的理解,简单描述,方便记忆。
     
    先理解 公/私 钥(yue)的意思:
    私钥,即 私人 的钥匙,是唯一的,所以可以用来证明来源是特定的人
    公钥,即 公用 的钥匙,我可以将它给很多人(公众)。所以既然那么多人都知道,所以公钥并不能证明来源一定是特定的人
     
    在理解 加密、签名 的作用:
      加密:用于防止信息外泄(泄露给不相关的人)
      签名:用于确认身份(可以类比下信用卡上的签名)
     
    ----> 到底谁 创建、拥有、使用 公/私 钥(yue)(这里很多人会混淆,而且网上很少有人说明,但很重要)? <----
     
    加签/验签 为例:
      1. A 想 使用 我的服务,为了安全,我不希望 A 以外的人可以使用这些服务
        创建
          此时,我会要求 A 创建 一对 公私钥,私钥他自行保留(用于证明他自己的身份),公钥给我(用于验签--验证签名)
        拥有
          此时 我拥有 A 的公钥A 拥有自己的私钥
        使用:
          A 请求 我的服务 时,使用私钥签名(具体如何签名,自行百度吧,这方面的内容真的很多
          我 收到请求后,用 A 给我的公钥 验签,验签通过即证明的确是A发送的请求,验证不通过当然是拒绝访问
        
      2. 那如果 A 调用我的服务之后,需要我返回请求结果,但又要保证一定是我返回的请求结果呢?
        创建
          此时,我 创建 一对 公私钥,私钥自行保留(用于证明我的身份),公钥给 A(用于验签--验证签名)
        拥有
          此时 我拥有 自己的私钥A 拥有我的公钥
        使用:
          我的返回结果 时,使用私钥签名
          A 收到请求结果后,用 我给A 的公钥 验签,验签通过即证明的确是我返回的结果,验证不通过当然是拒绝访问
     
    加密/解密
    签名保证了信息的来源可靠性,加密可以保证数据的安全性个人理解,在网络上传播消息,是可以通过各种手段拦截的,所以需要对数据进行加密
    如果 A 要 和 B 进行通讯:
       在发送消息时:使用 对方的公钥 进行加密;因为使用对方的公钥加密,就只要对方的私钥可以解密,也就是说不会有第三方可以解密内容。
         在接收信息时:使用 自己的私钥 进行解密;
     
    为什么不使用私钥加密?
      因为使用私钥加密之后,拥有公钥的人都可以进行解密,那岂不是泄露了 A 和 B 之间的消息了?
     
     
    感觉明白上面的问题,基本上都理解了。
     
    本文参考不少资料,包括但不限于:
    https://www.zhihu.com/question/25912483/answer/31656330
    https://songlee24.github.io/2015/05/03/public-key-and-private-key/
  • 相关阅读:
    (转载)SAPI 包含sphelper.h编译错误解决方案
    C++11标准的智能指针、野指针、内存泄露的理解(日后还会补充,先浅谈自己的理解)
    504. Base 7(LeetCode)
    242. Valid Anagram(LeetCode)
    169. Majority Element(LeetCode)
    100. Same Tree(LeetCode)
    171. Excel Sheet Column Number(LeetCode)
    168. Excel Sheet Column Title(LeetCode)
    122.Best Time to Buy and Sell Stock II(LeetCode)
    404. Sum of Left Leaves(LeetCode)
  • 原文地址:https://www.cnblogs.com/iceJava/p/7603706.html
Copyright © 2011-2022 走看看