- 浏览: 2828499 次
- 性别:
- 来自: 武汉
文章分类
- 全部博客 (1173)
- 名言警句 (5)
- 心情随笔 (50)
- 数据库 (57)
- Java基础 (241)
- J2EE框架 (91)
- 数据结构 (12)
- 程序设计 (21)
- WEB技术 (128)
- 网络日志 (12)
- IT资讯 (247)
- linux (64)
- solaris (2)
- 其它 (143)
- WebService (4)
- 日语学习 (2)
- 机器人 (5)
- Android (5)
- cgywin (3)
- Game (1)
- DWR (1)
- spring (8)
- canvas (1)
- Guava (3)
- Modbus (5)
- 测试 (6)
- mongodb (9)
- Quartz (2)
- Cron (1)
- windows (2)
- 持续集成 (1)
- bootstrap (3)
- 结对编程 (1)
- nodejs (1)
- Netty (1)
- 安全 (3)
- webstorm (2)
- sparkline (1)
- Job (1)
- git (3)
- Maven (3)
- knockout (5)
- jquery (1)
- bower (1)
- docker (1)
- confluence (4)
- wiki (1)
- GoogleMap (1)
- jekyll (10)
- ruby (2)
- npm (3)
- browserify (1)
- gulp (3)
- openwrt (1)
- discuz (3)
- 输入法 (1)
- JPA (1)
- eclipse (2)
- IntelliJ (1)
- css (1)
- 虚拟机 (1)
- 操作系统 (1)
- azkaban (2)
- scrum (1)
最新评论
-
pangxiea_:
你好, 想请问一下 Linux下 这么使用rxtxcomm 在 ...
使用Java进行串口通信 -
abababudei:
请教一下,这个您是怎么解决的:/dev/ttyS2enteri ...
Java应用程序的MODBUS通讯 -
xuniverse:
hannibal005 写道楼主,我问下 request.se ...
用javascript与java进行RSA加密与解密 -
atxkm:
找了一下午,终于找到了
gulp 拷贝文件时如何移除文件目录结构 -
kalogen:
gtczr 写道非常感谢,经过我自己的修改,已经完美实现。发出 ...
用javascript与java进行RSA加密与解密
和对称加密算法一样,非对称加密算法也提供两个函数:消息加密和消息解密,但该算法较对
称加密算法有两个重要的区别。首先,用于消息解密的密钥值与用于消息加密的密钥值不同;其次,非对称加密算法比对称加密算法慢数千倍,但在保护通信安全方
面,非对称加密算法却具有对称密码难以企及的优势。
为说明这种优势,来回顾一下前面使用对称加密算法的例子。Alice使用密钥K加密消
息并将其发送给Bob,Bob收到加密的消息后,使用密钥K对其解密以恢复原始消息。这里存在一个问题,即Alice如何将用于加密消息的密钥值发送给
Bob?答案是,Alice发送密钥值给Bob时必须通过独立的安全通信信道(即没人能监听到该信道中的通信)。
这种使用独立安全信道来交换对称
加密算法密钥的需求会带来更多问题。首先,如果有独立的安全信道,为什么不直接用它发送原始消息?答案通常是安全信道的带宽有限,如安全电话线或可信的送
信人。其次,Alice和Bob能假定他们的密钥值可以保持多久而不泄露(即不被其他人知道)以及他们应在何时交换新的密钥值?对这两个问题的回答属于密
钥管理的范畴。
密钥管理是使用加密算法时最棘手的问题,它不仅涉及如何将密钥值安全地分发给所有通信方,还涉及密钥的生命周期管理、密钥被破解时
应采取什么措施等问题。Alice和Bob的密钥管理需求可能并不复杂,他们可以通过电话(如果确定没人监听)或通过挂号信来交换密码。但如果Alice
不仅需要与Bob安全通信,还需要与许多其他人安全通信,那么她就需要与每个人交换密钥(通过可靠的电话或挂号信),并管理这一系列密钥,包括记住何时交
换新密钥、如何处理密钥泄漏和密钥不匹配(由于使用的密钥不正确,接收方无法解密消息)
等。当然,这些问题不只Alice会遇到,Bob和其他每个人都会遇到,他们都需要交换密钥并处理这些令人头痛的密钥管理问题(事实上,X9.17是一项DES密钥管理ANSI标准[ANSIX9.17])。
如果Alice要给数百人发送消息,那么事情将更麻烦,她必须使用不同的密钥值来加密每条消息。例如,要给200个人发送通知,Alice需要加密消息200次,对每个接收方加密一次消息。显然,在这种情况下,使用对称加密算法来进行安全通信的开销相当大。
非
对称加密算法的主要优势是使用两个而不是一个密钥值:一个密钥值用来加密消息,另一个密钥值用来解密消息。这两个密钥值在同一个过程中生成,称为密钥对。
用来加密消息的密钥称为公钥,用来解密消息的密钥称为私钥。用公钥加密的消息只能用与之对应的私钥来解密,私钥除了持有者外无人知道,而公钥却可通过非安
全管道来发送或在目录中发布。
仍用前面的例子来说明如何使用非对称加密算法来交换消息,Alice需要通过电子邮件给Bob发送一个机密文档。首
先,Bob使用电子邮件将自己的公钥发送给Alice。然后Alice用Bob的公钥对文档加密并通过电子邮件将加密消息发送给Bob。由于任何用Bob
的公钥加密的消息只能用Bob的私钥解密,因此即使窥探者知道Bob的公钥,消息也仍是安全的。Bob在收到加密消息后,用自己的私钥进行解密从而恢复原
始文档。
图2ˉ2说明了分别使用公钥和私钥来加密和解密消息的过程。
图2ˉ2 使用非对称加密算法的加密 |
如果Bob需要将编辑后的文档发回给Alice,他可以让Alice先将其公钥发送给他,然后
再用该公钥对编辑后的文档加密,并通过电子邮件将加密的文档发回给Alice。由于只有Ali
ce的私钥能解密该消息,并且只有Alice才有该私钥,因此消息是安全的,不能被其他人窥探
。如图2ˉ3所示。
图2ˉ3 Bob的公钥不能解密使用它加密的消息 |
注
意,非对称加密算法和对称加密算法之间有一个重要的差别:Alice和Bob不需要使用独立的安全管道交换用于加密消息的密钥值,从而解决了对称加密算法
中一个重要的密钥管理问题:如何将密钥值告诉对方。在非对称加密算法中,用于加密消息的密钥值是对所有人公开的。这还解决了对称密钥管理中另一个令人头疼
的问题:必须与每个通信方交换密钥值。在非对称加密算法中,任何需要给Alice发送安全消息的人都可以使用Alice的公钥。
回想一下,非对称
加密算法和对称加密算法之间的一个差别是,非对称加密算法的速度慢得多,比对称加密算法慢数千倍[WeiDai02]。在实际应用中,这种问题可以通过如
下方式解决:用非对称加密算法来传送临时对称密钥值,然后使用对称加密算法和该临时密钥来加密消息。这种对称密钥之所以是临时的(只持续一段时间),是因
为它只使用一次,而不像传统的对称密钥机制要求的那样持续可用或可重复使用。再回到前面的例子,Alice通过电子邮件给Bob发送机密文档。Alice
首先需要生成一个临时密钥值,用于使用对称加密算法加密
文档。然后创建另一条消息,即用Bob的公钥加密该临时密钥值,再将这两条消息都发送给Bob。收到消息后,Bob首先用自己的私钥解密出临时密钥值,再使用该临时密钥值(使用对称加密算法)来解密密文文档以恢复原始文档。
图2ˉ4给出了如何结合使用非对称加密算法和对称加密算法。
图2ˉ4 结合使用非对称加密算法和对称加密算法 |
非
对称加密算法的例子有RSA、Elgamal和ECC(椭圆曲线加密算法)。RSA是目前最常用
的算法。Elgamal是另一种常用的非对称加密算法,由Taher Elgamal于1985年发明,其基础
是DiffieˉHellman密钥交换算法,后者使通信双方能通过公开通信来推导出只有他们知道的
秘密密钥值[DiffieˉHellman]。
DiffieˉHellman是Whitfield Diffie和Martin
Hellman于1976年发明的,被视为第一种 非对称加密算法,尽管非对称加密算法的概念于6年前就已在英国提出了。DiffieˉHellman
与RSA的不同之处在于,DiffieˉHellman不是加密算法,它只是生成可用作对称密钥的秘密
数值。在DiffieˉHellman密钥交换过程中,发送方和接收方分别生成一个秘密的随机数,并
根据随机数推导出公开值,然后,双方再交换公开值。DiffieˉHellman算法的基础是具备生
成共享密钥的能力。只要交换了公开值,双方就能使用自己的私有数和对方的公开值来生成
对称密钥,称为共享密钥,对双方来说,该对称密钥是相同的,可以用于使用对称加密算法
加密数据。与RSA相比,DiffieˉHellman的优势之一是每次交换密钥时都使用一组新值,而
使用RSA算法时,如果攻击者获得了私钥,那么他不仅能解密之前截获的消息,还能解密之后
的所有消息。然而,RSA可以通过认证(如使用X.509数字证书)来防止中间人攻击,但Diff ieˉHellman在应对中间人攻击时非常脆弱。
评论
博主也很高产,700多篇了
发表评论
-
高级Java程序员值得拥有的10本书
2015-05-04 07:24 765Java是时下最流行的编程语言之一。市面上也出现了适合初学者 ... -
深入理解java异常处理机制
2015-01-30 09:30 12781. 引子 try…catch…fi ... -
java 运行时参数设置
2015-01-07 09:13 819JVM的运行时参数: -Xms为执行单元内存的1/4, ... -
每个Java开发者都应该知道的5个JDK工具
2014-12-29 12:37 1101JDK是Java语言的软件开 ... -
使用双重锁判定可以大幅降低锁的征用
2014-12-29 12:30 702class ObjInstance { //单例 pri ... -
MAVEN Scope使用说明
2014-11-24 09:40 712在Maven的依赖管理中,经常会用到依赖的scope设置。这 ... -
Spring4 quartz job xml configuration
2014-11-11 09:46 14041. 定义job details public ... -
Add items into list in one line using guava
2014-11-10 10:54 692//@formatter:off fina ... -
配置动态读取(变化)文件 in Spring
2014-11-10 08:51 12911. 从环境变量中读取路径: <bean id=&q ... -
JAVA实现AES加密与解密
2014-11-04 15:34 613package com.eifesun.monitor.up ... -
Netty4.x分析
2014-07-31 11:06 1420官网定义: netty是一个异步、事件驱动的网络应用框架,用 ... -
Ways to sort lists of objects in Java based on multiple fields
2014-07-21 17:19 7341. the first way: Sorting wit ... -
how to parse a String to BigDecimal
2014-07-21 10:08 886private BigDecimal parsePrice( ... -
order list using google guava
2014-07-21 09:08 853Predicate<String> filter ... -
Java 读文件操作
2014-07-08 14:09 8561. only use java core, no exte ... -
怎样使Java 中测试按一定顺序执行
2014-03-10 11:27 1266@FixMethodOrder(MethodSorters. ... -
如何实现在当类初始化时,自动调动某个方法
2014-02-14 14:44 921有两种思路, 1. 将这个类实现为thread类 (or ... -
持续集成JenkinsAPI常见用法
2014-02-10 13:54 43jenkins(持续集成开源工具)提供了丰富的api接口,基 ... -
Sonar 安装与使用
2014-01-13 10:49 1691Sonar 是一个用于代码质量管理的开放平台。通过插件机制, ... -
源代码管理分析工具 Source Navigator的安装与使用
2014-01-13 09:51 1839Source-Navigator是原来redhat开发的一个 ...
相关推荐
主要介绍RSA非对称加密算法的由来和应用场景,以及加密原理
非对称加密算法流程图,使用visio绘制。
java关于加密的算法demo代码(Base64加密\数字签名\对称加密算法\非对称加密算法\消息摘要算法) JAVA安全实现三种方式: 1.JDK 2.Commons Codec 3.Bouncy Castle 一。非对称加密算法: 1.DH 2.RSA 3.ELGamal 二。...
js版md5非对称加密算法js版md5非对称加密算法js版md5非对称加密算法js版md5非对称加密算法js版md5非对称加密算法
完整实验报告,共31页 包括实验目的,实验内容,实验步骤,运行结果,实验总结 附上了源码。 部分内容可见https://blog.csdn.net/guansheng123/article/details/123029969
对称加密:DES、3DES、DESX、Blowfish、IDEA、RC4、RC5、RC6和AES 非对称加密:RSA、ECC(移动设备用)、Diffie-Hellman、El Gamal、DSA(数字签名用)
ECC非对称加密算法, 最快,最安全的加密算法
这是本人总结的Java 非对称 加密 算法,有疑问可以找我1038546502@qq.com
非对称加密算法,网上找到的,与大家分享!
visual c++ vc实现RSA加密算法是最常用的非对称加密算法.zip
一个简单的使用.Net非对称加密算法的例子, 本例的程序很简单,仅用于说明如何在.Net里面使用非对称(RSA)算法。
用JAVA实现Rsa非对称加密算法 不算简单的算法 既可以加密又可以解密
一个来自Java非对称加密算法演示源码,通过网络或磁盘等方式,把公钥编码传送给李四,李四接收到张三编码后的公钥,将其解码,将公钥的KeySpec对象转换为公钥,张三用自己的私钥解密从李四处收到的信息,里面对原理的...
C语言实现非对称密码算法RSA,其中RSA计算采用的是平方乘算法
对称加密算法与非对称加密算法.doc
非对称密钥,自己看,不多说了 。
RSA加密算法,相信大家都听说过吧,这个程序是用来演示这个算法的,支持大数操作,很强大,