您的位置:首页 > 编程语言 > Java开发

密码和Java中的加解密之基础部分

2012-10-15 14:43 197 查看
一、对称加密算法

1.对称加密算法有两种类型:分组密码和流密码。

分组密码一次对一个数据块进行加密--通常是64位,有些算法是128位。流密码对数据流进行加,一次一位或一个字节。

分组密码可以用来创建流密码,反之亦然。对单条信息加密,应使用分组密码。对一个信息流,最好使用流密码,如一个socket。

对称加密算法的强度主要由密钥的长度决定的。

密钥越长,破解难度越大。密钥长度按bit表示,通常从40到448bit不等。

要破解一段加密过的信息,功击者需要通过枚举法才能得到密钥,也就是说,他们需要尝试每一个可能的密钥。

加密算法使用的所有可能的密钥集合有一个术语叫"密钥空间"。

对一个40位的密钥,所有可能的密钥有2^40个,而128位的密钥意味着有2^128个潜在密钥。

密钥每增加一位,安全性就提高一倍。

(超级计算机可能在24时内破解一个56位的密钥,但要破解一个128位的密钥则需要试24小时的2^72倍)

对称加密基本都采用相同的方式:在加密和解密时,使用了相同的密钥。

比非对称加密速度快的多。

2.常用的对称加密算法:

DES (分组密码) 全称是数据加密标准,密钥长度56位。

TripleDES (分组密码)有时也被称为DESede,密钥长度168位(112位有效)

它实际是用不同的密钥把DES使用三遍。第一轮是加密,第二轮是解密,第三轮又是加密,

所以名为DESede-- encryption、decryption、encryption。

密钥可能有两到三个,总的密钥位数可能有56到112或168位。如果使用两个密钥,第一轮和第三轮使用第一个密钥,第二轮用第二个密钥。

如果用三个密钥,每轮都用不同的密钥。

传送时这些密钥组合为一个密钥,总长为112或168位。

Blowfish (分组密码) 是目前替代DES的最快和最安全的算法。密钥长度可变 达448位。

RC4 (流密码) 大部分SSL都是用它实现。密钥长度可变40到128位。

AES (流密码) 密钥长度可变128、192或256位。 替代DES的新密码算法。

二、非对称加密

1.非对称加密也被称为公钥加密。非对称加密有两个密钥,一个公钥和一个私钥,前者用于加密,后者解密。

非对称加密所需密钥的长度比对称加密要大得多。一个1024位的非对称加密的密钥提供的加密强度与128位的对称加密的密钥相当。

速度比对称加密的慢的多。

2.常用的非对称加密算法:

RSA (分组密码) 密钥他长度可变(512、1024或者2048位) 最流行的公钥算法,专利于2000.9过期,可以免费使用。

El Gamal (分组密码) 密钥他长度可变(512、1024或者2048位) 不如RSA常用。

三、会话密钥加密

1.会话加密把对称加密和非对称加密一起使用,集中了二者的优点。

采用对称密钥对消息进行加密,而用公钥对密钥本身进行加密。

某些非对称加密算法,如RSA,在一些特定方式下使用时容易受影响。

因为文本总是有一些重复出现的模式,分析这些重复出现的密文可以破解整个文件。

然而,用非对称算法对随机出现的二进制的会话密钥进行加密,由于非对称算的加密方式,几乎不可能根据上下文对密文进行分析。

2.会话密钥加密协定例子:

PGP 用于对E-mail进行会话密钥加密。它组合了很多算法,包括RSA、TripleDES等等。

S/MIME 既安全/多目地互联网邮件扩展。类似于PGP,常用于电子邮件保护。

SSL和TLS 主要目地是保护TCP/IP流量的安全。主要是为Web设计,也可以用于其他形式的Internet通信安全。

四、密钥协定

1.与非对称加密类似,密钥协定是另一种不需要交换密钥而发送安全消息的方法。

象非对称加密一样,它依赖于一个公钥--私钥对,但这些密钥不是加密用的,而是用来创建共享秘密。

共享秘密才是用来创建会话密钥的。

主要不同之处是,密钥协定中,会话密钥永远不会发送出去,而通常的会话密钥会被发送出去,只是先经过了加密。

2.Diffie-Hellman密钥协定算法

第一个拥用独立的公钥-私钥对的算法。

只有通过公钥加密才能够在预先不定义一些共享秘密的情况下交换消息。

在这个算法发明以前,如果需要和别人共享秘密信息,你先要和他们秘密会面,交换密钥。

而公钥加密方法则使人们能够公开的光换密钥。

五、认证

认证就是确定一条消息或一个用户的可靠性的过程。

它可以用来验证用户的身份,或者确定一条消息有没能被篡改。

1. 消息摘要

1.1 有时也被称为杂凑,类似于文档的指纹,用于证明数据没有被篡改或损坏。

消息摘要是单向函数,不可能用通过散杂凑把原始密码破解出来,只能去猜。

消息摘要很少,通常只有16到20个字节长。

两个文档产生相同的消息摘要的机会非常非常小,除非是同一个文档。

一旦收到文件和摘要,就可以运用消息摘要算法,把运算后的文件摘要与下载的摘要比较。

消息摘要的另一个用途是密钥认证。

大部分操作系统的密码都是以散杂凑的形式存储,而不是密码的原始文本。

1.2 常用的消息摘要算法:

MD5 是常用的128位消息摘要,大量用口令存储机制。

SHA和SHA-1 安全的杂凑算法。SHA-1是SHA的修改版。一般提到的SHA都是SHA-1。

它是一种160位的杂凑算法,理论上比MD5更安全。

2. 消息认证码(MAC:Message Authentiaction Codes)

2.1 是带有密钥的消息摘要。

由于双方都拥有密钥,接收者可以验证消息是否正确,从而提高了安全性。

MAC通常用于已经建立安全连接的场合。例如:SSL就使用MAC来校验接收的数据。

在会话开始时已经交换了密钥。如果数据在传输过程中有损坏或被篡改,检查MAC就可以发现。

2.2 常用的MCA

HmacMD5 是内部使用了带密钥的MD5摘要算法的消息认证码。

HmacSHA1 类似与HmacMD5,只是算法改为SHA-1。

3. 消息签名

提供两个功能:

对数据源的保证

证明数据没有被篡改

数字签名采用一个人的私钥计算出来,然后用公钥去校验。

产生数字签名需要一个公钥-私钥对。跟非对称加密一样,公钥可以随意发布,私钥需要安全的保管。

4.数字证书

数字证书主要指的是一个团体签署的声明,证明另一个团体公钥确定是属于他们的。

证书主要是指一个人的公钥和一些由权威的私钥校验过的鉴定信息。可以用权威机构的公钥来校验。

证书授权机构既CA。

证书也可以包含除公钥和数字签名以外的其他信息。SSL证书中包含了证书主人的主机名称。

证书也可以用来签署和加密电子邮件。这样的证书包含了用户的电子邮件地址。

5.证书链

证书经常被链接在一起。

所谓证书链指的是用另一个把一个证书作为公钥的私钥签名一个证书的方法。

它可以让一个证书授权机构,通常称为root CA,去为另一个证书授权机构作认证。

证书链中的项级证书必须是自我签名的。

最常见的root CA是VerSign。

额外提一下BASE64编码

二制进一般都是按8位一字节进行保存。标准的ASCII码权只有7位(0x00~~0x7f),所以我们把二进制用ASCII的形式进行显示,那么每个字节必须失去1位。

BASE64编码是解决这个问题的办法,它是把每字节的8位转换为6位的块,然后再转换为字符。这里采用6位以便在数据结束时用一些控制字符来表示。

编码字符可以显示在屏幕上并且很轻松的就可以转换为二进制数。

当然把8位块变为6位块,就会产生更多的块。

//实例
String str = "hello中文123.#!";
System.out.println("原文:"+str);

byte[] bys = str.getBytes("UTF-8");
BASE64Encoder b64Encoder = new BASE64Encoder();
String ec = b64Encoder.encode(bys);
System.out.println("base64编码:"+ec);

BASE64Decoder b64Decoder = new BASE64Decoder();
bys = b64Decoder.decodeBuffer(ec);
System.out.println("base64解码:"+new String(bys,"UTF-8"));
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: