密码学-数据公钥加密和认证中的私钥公钥

一、公钥加密
假设一下,我找了两个数字,一个是1,一个是2。我喜欢2这个数字,就保留起来,不告诉你们(私钥),然后我告诉大家,1是我的公钥。

我有一个文件,不能让别人看,我就用1加密了。

别人找到了这个文件,但是他不知道2就是解密的私钥啊,所以他解不开,只有我可以用数字2,就是我的私钥,来解密。这样我就可以保护数据了。

我的好朋友x用我的公钥1加密了字符a,加密后成了b,放在网上。

别人偷到了这个文件,但是别人解不开,因为别人不知道2就是我的私钥,只有我才能解密,解密后就得到a。

这样,我们就可以传送加密的数据了。

二、私钥签名
如果我用私钥加密一段数据(当然只有我可以用私钥加密,因为只有我知道2是我的私钥),结果所有的人都看到我的内容了,因为他们都知道我的公钥是1,那么这种加密有什么用处呢?

但是我的好朋友x说有人冒充我给他发信。怎么办呢?

我把我要发的信,内容是c,用我的私钥2,加密,加密后的内容是d,发给x,再告诉他解密看是不是c。他用我的公钥1解密,发现果然是c。这个时候,他会想到,能够用我的公钥解密的数据,必然是用我的私钥加的密。只有我知道我得私钥,因此他就可以确认确实是我发的东西。

这样我们就能确认发送方身份了。

这个过程叫做数字签名。当然具体的过程要稍微复杂一些。用私钥来加密数据,用途就是数字签名

先前我曾经写了一篇“网站的安全登录认证设计”,可能是讲述的不够清楚,有一位读者就留言质疑到,“公钥顾名思义就是公开的啦,只要你愿意,谁都会有你的公钥,何来安全?应该是用网站的公钥加密,传到网站后,网站用自己的私钥解密吧”。

  这些密码学的概念容易被搞混淆,的确也情有可原。因为公钥、私钥、加密、认证这些都是较为复杂的问题,其概念不太容易理解,理解不透就容易产生各种似是而非的概念,为了让大家对于密码学有进一步的了解,这里我就详细解说一下公钥和私钥的具体作用和使用方法。

  加密和认证

  首先我们需要区分加密和认证这两个基本概念。

   加密是将数据资料加密,使得非法用户即使取得加密过的资料,也无法获取正确的资料内容,所以数据加密可以保护数据,防止监听攻击。其重点在于数据的安全 性。身份认证是用来判断某个身份的真实性,确认身份后,系统才可以依不同的身份给予不同的权限。其重点在于用户的真实性。两者的侧重点是不同的。

  公钥和私钥

  其次我们还要了解公钥和私钥的概念和作用。

  在现代密码体制中加密和解密是采用不同的密钥(公开密钥),也就是非对称密钥密码系统,每个通信方均需要两个密钥,即公钥和私钥,这两把密钥可以互为加解密。公钥是公开的,不需要保密,而私钥是由个人自己持有,并且必须妥善保管和注意保密。

  公钥私钥的原则:

  1. 一个公钥对应一个私钥。
  2. 密钥对中,让大家都知道的是公钥,不告诉大家,只有自己知道的,是私钥。
  3. 如果用其中一个密钥加密数据,则只有对应的那个密钥才可以解密。
  4. 如果用其中一个密钥可以进行解密数据,则该数据必然是对应的那个密钥进行的加密。

  非对称密钥密码的主要应用就是公钥加密和公钥认证,而公钥加密的过程和公钥认证的过程是不一样的,下面我就详细讲解一下两者的区别。

  基于公开密钥的加密过程

  比如有两个用户Alice和Bob,Alice想把一段明文通过双钥加密的技术发送给Bob,Bob有一对公钥和私钥,那么加密解密的过程如下:

  1. Bob将他的公开密钥传送给Alice。
  2. Alice用Bob的公开密钥加密她的消息,然后传送给Bob。
  3. Bob用他的私人密钥解密Alice的消息。

  上面的过程可以用下图表示,Alice使用Bob的公钥进行加密,Bob用自己的私钥进行解密。

  基于公开密钥的认证过程

  身份认证和加密就不同了,主要用户鉴别用户的真伪。这里我们只要能够鉴别一个用户的私钥是正确的,就可以鉴别这个用户的真伪。

   还是Alice和Bob这两个用户,Alice想让Bob知道自己是真实的Alice,而不是假冒的,因此Alice只要使用公钥密码学对文件签名发送 给Bob,Bob使用Alice的公钥对文件进行解密,如果可以解密成功,则证明Alice的私钥是正确的,因而就完成了对Alice的身份鉴别。整个身 份认证的过程如下:

  1. Alice用她的私人密钥对文件加密,从而对文件签名。
  2. Alice将签名的文件传送给Bob。
  3. Bob用Alice的公钥解密文件,从而验证签名。

  上面的过程可以用下图表示,Alice使用自己的私钥加密,Bob用Alice的公钥进行解密。

  总结

  好了,上面就详细讲述了加密、认证、公钥、私钥这四个概念,明白这些概念后,你就应该对“网站的安全登录认证设计”一文所讲述的概念有了更清晰的了解了。

转自:http://www.williamlong.info/archives/837.html

时间: 2024-10-26 21:00:08

密码学-数据公钥加密和认证中的私钥公钥的相关文章

openresty中使用私钥/公钥进行加密/解密/签名/验签。

对于公钥私钥的提取,详细请看http://www.cnblogs.com/dreamer-One/p/5621134.html另外付在线加解密工具链接:http://tool.chacuo.net/cryptrsaprikey--公钥local RSA_PUBLIC_KEY = [[ -----BEGIN RSA PUBLIC KEY----- MIGJAoGBAJ9YqFCTlhnmTYNCezMfy7yb7xwAzRinXup1Zl51517rhJq8W0wVwNt+ mcKwRzisA1S

什么是 Uptime TIER 数据中心等级认证体系?-孙长青

Tier等级标准的制定单位是美国的Uptime Institute Uptime Institute成立于1993年,20余年来长期致力于数据中心基础设施的探索和研究,是全球公认的数据中心标准组织和第三方认证机构.其主要标准<Data Center Site Infrastructure Tier Standard: Topology>和<Data Center Site Infrastructure Tier Standard: OperationalSustainability>

C#中导出数据到Excel表格中

之前PM交给我一个自动化测试的Case,让我抓取页面上的数据到Excel表格中,刚好又接了一个之前人家做的系统, 刚好看到可以用NPOI导数据,就动手试试,成功导出. 由于鄙人比较菜,也比较懒, 怕自己忘记了,今天就总结一下,以防下次用可以参考. 1.要使用NPOI,首先需要在Project中Install NPOI的 Package. 右键点击Project------>Manage NuGet Packages---->Search NPOI----->点击搜索到的NPOI然后点击等

C# 将Access中时间段条件查询的数据添加到ListView中

C# 将Access中时间段条件查询的数据添加到ListView中 一.让ListView控件显示表头的方法 在窗体中添加ListView 空间,其属性中设置:View属性设置为:Detail,Columns集合中添加表头中的文字. 二.利用代码给ListView添加Item. 首先,ListView的Item属性包括Items和SubItems.必须先实例化一个ListIteView对象.具体如下: ListViewItem listViewItem=new ListViewItem(); l

解决Postman发送post数据但是Node.js中req.body接收不到数据的问题

之前编写后台接口,测试数据都是使用的Postman,相当的方便,之前也一直使用get方法,编写Node.js一直没有问题,但是由于要编写一个注册/登陆的功能,所以发送的post数据,后台的逻辑已经编写完成,但是当使用post传来数据时req.body中却为空,翻看半天以前的项目代码,也没有发现我哪里写错了. 最后确定是Postman需要进行设置 这个图是摘自:http://drupal.stackexchange.com/questions/50559/services-module-how-t

AGS中通过FeatureServer插入数据失败、插入数据在WMTS请求中无法显示以及version概念的讨论

1.背景 在多个项目中,当我方接口给其他部门人员使用时出现了插入数据失败或者插入的数据在WMTS请求中无法显示出来的问题.针对这些问题,我在这篇文章中,将详细描述造成以上问题的原因.在此WebGIS产品的前台和后台接口中,此插入数据核心部分均是FeatureServer请求.所以我们首先对FeatureSever服务做一个大致的了解. 2.FeatureServer服务的大致了解 2.1 FeatureServer服务提供的功能 FeatureServer服务可以提供如下几种服务: 我们可以得出

数据容灾在数据库容灾领域中的比重及其意义

数据容灾只是确保数据安全的一个方案,当这个方案无法保障数据安全时,需要专业的数据恢复工具对其原有数据或者备份数据进行数据恢复.无论采用哪种容灾方案,数据备份还是最基础的,没有备份的数据,任何容灾都没有现实意义.但光有备份是不够的,容灾也必不可少.容灾对于IT而言,就是提供一个防止各种灾难的计算机信息系统.     数据容灾根据不同时机需求可以有不同的等级.中小企业通常只需采用本地容灾即可.所谓本地容灾就是在企业网络本地所进行的容灾措施,其中包括在本地备份.存储.保管备份媒体.在一些大众型企业,所

SQL SERVER 使用BULK Insert将txt文件中的数据批量插入表中(1)

1/首先建立数据表 CREATE TABLE BasicMsg( RecvTime FLOAT NOT NULL , --接收时间,不存在时间相同的数据 AA INT NOT NULL, --24位地址码 . FlightID Varchar(10) NULL, --航班号) 2/ 建立存储过程 USE DF17DataProIF EXISTS (SELECT * FROM SYS.PROCEDURES WHERE OBJECT_ID = OBJECT_ID(N'[DBO].[BulkDataP

使用Sqoop,最终导入到hive中的数据和原数据库中数据不一致解决办法

Sqoop是一款开源的工具,主要用于在Hadoop(Hive)与传统的数据库(mysql.postgresql...)间进行数据的传递,可以将一个关系型数据库(例如 : MySQL ,Oracle ,Postgres等)中的数据导进到Hadoop的HDFS中,也可以将HDFS的数据导进到关系型数据库中. 1.问题背景 使用Sqoop把oracle数据库中的一张表,这里假定为student,当中的数据导入到hdfs中,然后再创建hive的external表,location到刚才保存到hdfs中数