1.     私钥加密:也就是对称加密。

这种算法采用同一个密钥(Key)对数据进行加密和解密,虽然可以通过设置初始化向量(IV),但因为在加密方和解密方中需要共享这两部分信息,相对而言,它不够安全。但一般来说,它也已经足够安全,而且足够简单,尤其是对于加密数据而言。很多硬件设备(例如ATM提款机)都是内置了私钥加密方法的,据说是DES算法

私钥加密算法使用单个私钥来加密和解密数据。由于具有密钥的任意一方都可以使用该密钥解密您的数据,或加密他们自己的数据并声称该数据源自您,因此必须保护密钥不被未经授权的代理得到。

私钥加密又称为对称加密,因为同一密钥既用于加密又用于解密。私钥加密算法的速度非常快(与公钥算法相比),它特别适用于对较大的数据流执行加密转换。从数学角度而言,非对称加密算法(例如 RSA)在可加密的数据量方面存在限制。对称加密算法一般则没有这些问题。

私钥加密的方式速度比较快,但它的密钥通常需要非对称的方式来进行保护。

例子:

假定小红和小明是希望在非安全信道上通信的双方,他们可以按如下方式使用私钥加密:小红和小明都同意对特定的密钥和 IV 应用一种特定的算法(例如 AES)。小红撰写一条消息并创建要在其上发送该消息的网络流。接下来,她使用该密钥和 IV 加密文本,并通过 Internet 发送该文本。她不能向小明发送密钥,但可以发送 IV。小明在收到该加密文本后,可使用预先商定的密钥和 IV 对它进行解密。即使传输的内容被人截获,截获者也无法恢复原始消息,因为他并不知道密钥。在这个方案中,密钥必须保密,但 IV 不需要保密。在一个实际方案中,将由小红或小明生成私钥并使用公钥(不对称)加密将私钥(对称)传递给对方。

2.     公钥加密:也就是非对称加密。

这种算法采用公钥和私钥两个密钥,如果利用公钥进行加密,而用私钥解密,这种场景属于数据保护。而如果利用私钥加密,利用公钥解密,虽然是行得通的,但其实不可能会这样用,因为任何拥有公钥的接收方都可以解开数据,而公钥本来就是公开的,这样实现不了数据保护的目的。

公钥加密使用一个必须对未经授权的用户保密的私钥和一个可以对任何人公开的公钥。公钥和私钥在数学上是关联在一起的;用公钥加密的数据只能用私钥解密,而用私钥签名的数据只能用公钥验证。公钥可以提供给任何人;公钥用于对要发送到私钥持有者的数据进行加密。公钥加密算法又称为非对称算法,原因是需要用一个密钥加密数据,而用另一个密钥来解密数据。对于每个通信会话,这两个密钥应该都是唯一的。不过,尽管非对称算法具有此项要求,但在实践中,非对称密钥通常却有较长的生存期。

例子:

双方(小红和小明)可以按照下列方式使用公钥加密: 首先,小红生成一个公钥/私钥对。如果小明想要给小红发送一条加密的消息,他将向她索要她的公钥。小红通过非安全网络将她的公钥发送给小明,小明接着使用该密钥加密消息。小明将加密的消息发送给小红,而小红使用她的私钥解密该消息。如果小明通过非安全信道(例如公共网络)接收小红的密钥,则小明可能会受到“中间人”攻击。因此,小明必须与小红验证他收到的公钥副本是否正确。

但是,在传输小红的公钥期间,未经授权的代理可能会截获该密钥。而且,同一代理可能截获来自小明的加密消息。但是,该代理无法用公钥解密该消息。该消息只能用小红的私钥解密,而该私钥并没有被传输。小红不使用她的私钥加密给小明的答复消息,原因是任何具有公钥的人都可以解密该消息。如果小红想要将消息发送回小明,她将向小明索要他的公钥并使用该公钥加密她的消息。然后,小明使用与他相关联的私钥来解密该消息。

在此方案中,小红和小明使用公钥(非对称)加密来传输私钥(对称),并对其会话的其余部分使用私钥加密。

注意:证书从本质上说是一种特殊的公钥加密手段,特殊之处在于它可以存储在机器上,并且可以导出文件进行传递。

3.     数字签名

公钥算法还可用于构成数字签名。数字签名验证发送方的身份(如果您信任发送方的公钥)并帮助保护数据的完整性。使用由小红生成的公钥,小红的数据的接收者可以通过将数字签名与小红的数据和小红的公钥进行比较来验证是否是小红发送了该数据。

例子:

为了使用公钥加密对消息进行数字签名,小红首先将哈希算法应用于该消息以创建消息摘要。该消息摘要是数据的紧凑且唯一的表示形式。然后,小红用她的私钥加密该消息摘要以创建她的个人签名。在收到消息和签名时,小明使用小红的公钥解密签名以恢复消息摘要,并使用与小红所使用的相同的哈希算法来散列消息。如果小明计算的消息摘要与从小红那里收到的消息摘要完全一致,小明就可以确定该消息来自私钥的持有人,并且数据未被修改过。如果小明相信小红是私钥的持有人,则他将知道该消息来自小红。

4.     哈希

哈希算法可将任意长度的二进制值映射为固定长度的较小二进制值,这个小的二进制值就称为哈希值。哈希值是一段数据的数值表示形式。散列一段纯文本时,即使只更改段落中的一个字母,随后的散列计算都会产生不同的值。如果哈希已进行强加密,其值将发生显著更改。例如,如果更改了消息的一个位,强哈希函数就可能生成相差 50% 的输出。很多输入值可能会散列为相同的输出值。但是,要找到散列为同一个值的两个不同的输入,在计算上是不可行的。

例子:

双方(小红和小明)可按以下方式使用哈希函数,以确保数据完整性:小红撰写要发送给小明的消息,并创建该消息的哈希。随后,小明可以散列该消息,并将得到的哈希与原始哈希进行比较。如果这两个哈希值相同,则说明消息未被更改。如若不同,则说明该消息在由小红撰写后已被他人更改。为了使此系统发挥作用,小红必须对除小明外的所有人保密原始的哈希值。此外,也可以公开该哈希值,但条件是没有人能够对它进行修改。

参考:

http://www.cnblogs.com/chenxizhang/archive/2010/03/24/1693396.html

关于私钥加密、公钥加密、签名在生活中的场景相关推荐

  1. 大数据培训:生活中这些场景都用到了大数据

    来源:千锋大数据 一.什么是大数据 大数据(big data),指无法在一定时间范围内用常规软件工具进行捕捉.管理和处理的数据集合,需要新处理模式才能具有更强的决策力.洞察力和流程优化能力的海量.高增 ...

  2. Redis学习(一)—生活中实用场景帮助理解redis的五种基本数据类型

    Redis实例目录 (一)String (1)业务场景1--分库分表后获取唯一id (2)业务场景2--数据时效性设置 (3)业务场景3--高频数据访问显示 实现方式一 实现方式二 (二)Hash ( ...

  3. 生活中的适配器模式——身高不够鞋来凑

    [故事剧情] 晚上九点半,Tony上了地铁,准备回家,正巧还有一个空位,赶紧走向前坐下.工作一天后,疲惫不堪的他正准备坐着打个盹小睡一会.这时进来两个小姑娘,一个小巧可爱,一个身姿曼妙:嬉笑地聊着天走 ...

  4. 分享一个RSA加解密工具类,公钥加密私钥解密、私钥加密公钥解密、私钥签名公钥验签、生成公钥私钥

    测试: public static void main(String[] args) {try {//生成公钥私钥Map<String, Object> map = RSAUtil.ini ...

  5. C#实现RSA公钥加密私钥解密、私钥加密公钥解密以及Pcks12、X509证书加解密、签名验签

    RSA的私钥签名公钥验签可以见 http://blog.csdn.net/starfd/article/details/51917916,所以这里就没提供对应代码,具体代码如下: using Org. ...

  6. RSA不对称加密,公钥加密私钥解密,私钥加密公钥解密

    RSA算法是第一个能同时用于加密和数字签名的算法,也易于理解和操作. RSA是被研究得最广泛的公钥算法,从提出到现在已近二十年,经历了各种攻击的考验,逐渐为人们接受,普遍认为是目前最优秀的公钥方案之一 ...

  7. 公钥加密私钥解密私钥加密公钥解密

    公钥加密体制 1.公钥加密体制用于保密性时,就是公钥加密,私钥解密. 因为公钥是可以公开了, 那么任何人都可以使用公钥对信息进行加密,但是只有持有私钥的人才能正确解密.这样就保证了信息的保密性,因为只 ...

  8. openssl公钥加密私钥解密和私钥加密公钥解密

    最近在弄音视频上云,参考了腾讯云中SecretId和SecretKey,直观理解SecretKey是私钥,用于签名,然后公钥验证签名,个人理解SecretId在腾讯云系统里面有一条记录,此记录存放着公 ...

  9. SSL基础:9:公钥加密 vs 私钥加密

    在前面的文章中讲述过使用公钥加密.私钥解密的使用示例,同时也介绍过使用私钥对文件进行签名,使用公钥进行验证的示例.这篇文章继续来讨论一下应该是公钥加密还是私钥加密的问题. 公钥和私钥相关的基础常识 首 ...

最新文章

  1. JavaScript 事件冒泡简介及应用(转)
  2. 极客新闻——02、最高效的人都是最会休息的人
  3. python编程入门指南怎么样-大家都是怎么样自学python的?
  4. Android+Java中使用RSA加密实现接口调用时的校验功能
  5. 解决spring-session升级到2.0.0报错的问题
  6. python包怎么用_python的包怎么应用
  7. JDK的目录结构及结构图
  8. bzoj 1607: [Usaco2008 Dec]Patting Heads 轻拍牛头
  9. dnf最新地图编号2020_2020手游崛起端游没落?网易新端游好玩刺激能搬砖,网友:妙...
  10. Calendar类和GregorianCalendar类
  11. linux qt程序崩溃_【工程师分享】在MPSoC上运行基于eglfs_kms的QT应用程序
  12. 张量(tensor)的理解
  13. 什么的SIT测试?什么是UAT测试?
  14. 泛微oa系统什么框架_泛微OA办公系统是什么,怎么使用_使用方法_使用平台_企业服务汇...
  15. Java技术栈(总图)
  16. 已知两边求角度公式_已知三边求角度公式
  17. java判断是否是英文_Java 判断输入是否为英文字符
  18. 5G驱动下边缘计算的发展趋势与投资机会
  19. 斩获 offer 的 Java 面试宝典
  20. 白鹭[egret]项目目录介绍)

热门文章

  1. linux的cache memory解析
  2. linux下配置squid 服务器,最简单使用方式
  3. Java设计模式之七大结构型模式(附实例和详解)
  4. 当前页面跳转网页,新打开和在本页面打开
  5. html5和css3打造一款创意404页面
  6. Webwork2之Action Result Type(转载)
  7. 呵呵,幸亏当初选了这个BLOG
  8. python面试题之介绍一下Python中webbrowser的用法
  9. 解决python 提示 SyntaxError: Missing parentheses in call to 'print'
  10. Power Designer逆向工程连接数据库创建pdm-oracle