zoukankan      html  css  js  c++  java
  • 公钥和私钥的简单通俗说明

    私钥加密公钥可以解密

    公钥加密私钥可以解密


    小明想秘密给小英发送消息 小英手里有一个盒子(public key),

    这个盒子只有小英手里的钥匙(private key)才打得开

    小英把盒子送给小明(分发公钥) 小明写好消息放进盒子里,锁上盒子(公钥加密)

    小明把盒子寄给小英(密文传输) 小英用手里的钥匙打开盒子,得到小明的消息(私钥解密)

    假设小刚劫持了盒子,因为没有小英的钥匙,他也打不开



    其实公钥和私钥都可以用来加密或解密---只要能保证用A加密,就用B解密就行。至于A是公钥还是私钥,其实可以根据不同的用途而定。

    例如说,如果你想把某个消息秘密的发给某人,那你就可以用他的公钥加密。因为只有他知道他的私钥,所以这消息也就只有他本人能解开,于是你就达到了你的目的。

    但是如果你想发布一个公告,需要一个手段来证明这确实是你本人发的,而不是其他人冒名顶替的。那你可以在你的公告开头或者结尾附上一段用你的私钥加密的内容(例如说就是你公告正文的一段话),那所有其他人都可以用你的公钥来解密,看看解出来的内容是不是相符的。如果是的话,那就说明这公告确实是你发的---因为只有你的公钥才能解开你的私钥加密的内容,而其他人是拿不到你的私钥的。

    最后再说一下数字签名。
    数字签名无非就两个目的:
    证明这消息是你发的
    证明这消息内容确实是完整的---也就是没有经过任何形式的篡改(包括替换、缺少、新增)。

    其实,上面关于“公告”那段内容,已经证明了第一点:证明这消息是你发的。
    那么要做到第二点,也很简单,就是把你公告的原文做一次哈希(md5或者sha1都行),然后用你的私钥加密这段哈希作为签名,并一起公布出去。当别人收到你的公告时,他可以用你的公钥解密你的签名,如果解密成功,并且解密出来的哈希值确实和你的公告原文一致,那么他就证明了两点:这消息确实是你发的,而且内容是完整的。(转载知乎用户)
     
    作者:知乎用户
    链接:https://www.zhihu.com/question/25912483/answer/31656330
    来源:知乎
  • 相关阅读:
    使用Azure进行自动化机器学习
    关于ML.NET v1.0 RC的发布说明
    关于ML.NET v0.8的发布说明
    使用ML.NET + Azure DevOps + Azure Container Instances打造机器学习生产化
    使用ML.NET + ASP.NET Core + Docker + Azure Container Instances部署.NET机器学习模型
    neo4j 数据库迁移
    ubuntu1604 搜狗输入法安装
    Chrome 键盘快捷键
    Ubuntu Cleaner清理工具
    bash 数组
  • 原文地址:https://www.cnblogs.com/suanshun/p/7363694.html
Copyright © 2011-2022 走看看