Java加密和解密

明文是指未加密前的原始数据,密文是指加密后的数据。

根据加密和解密时的密码不同,可以分为两种类型的加密解密算法。

密码学常用术语

明文: 待加密数据。

密文: 明文经过加密后数据。

加密: 将明文转换为密文的过程。

加密算法: 将明文转换为密文的转换算法。

加密密钥: 通过加密算法进行加密操作的密钥。

解密: 将密文转换为明文的过程。

解密算法: 将密文转换为明文的转换算法。

解密密钥: 通过解密短发进行解密操作的密钥。


对称加密/解密

对称加密算法是应用较早的加密算法,技术成熟。在对称加密算法中,数据发信方将明文(原始数据)和加密密钥一起经过特殊加密算法处理后,使其变成复杂的加密密文发送出去。收信方收到密文后,若想解读原文,则需要使用加密用过的密钥及相同算法的逆算法对密文进行解密,才能使其恢复成可读明文。在对称加密算法中,使用的密钥只有一个,发收信双方都使用这个密钥对数据进行加密和解密,这就要求解密方事先必须知道加密密钥。


非对称加密/解密

加密和解密使用不同的密码,有代表性的有RSA、DSA、ElGamal和ECDSA。非对称加密/解密的安全性是基于复杂数学难题,特点是运算复杂、速度慢,主要应用于金融、军事等重大机密的系统。

非对称加密是借助匹配的一对密钥(公钥publicKey 和私钥privateKey),加密时借助公钥和原始数据(需加密消息)一起经过特殊加密算法处理,解密时采用私钥和加过密的数据进过逆算法对密文进行解密;或者加密时使用私钥进行加密,解密时使用公钥进行解密。


公钥和私钥

加密密码和解密密码是相对的,如果用加密密码加密那么只有解密密码才能解密,如果用解密密码加密则只有加密密码能解密,所以它们被称为密码对,其中的一个可以在网络上发送、公布,叫做公钥,而另一个则只有密钥对的所有人才持有,叫做私钥,私钥不以任何形式传播。


三种加解密算法:

  1. DES: 1977年1月,美国政府颁布:采纳IBM公司设计的方案作为非机密数据的正式数据加密标准(DES?Data Encryption Standard)。先需要生成一个密钥key,可以采用随机数生成,然后根据这个密钥进行加密解密操作。 

  2. RSA:RSA是第一个既能用于数据加密也能用于数字签名的算法。它易于理解和操作,也很流行。算法的名字以发明者的名字命名:Ron Rivest, Adi Shamir 和Leonard Adleman。RSA算法,需要生成密钥对(公钥publicKey、私钥privateKey),可以采用随机数产生,然后根据密钥对进行加密解密操作。 

  3. MD5:Message Digest Algorithm MD5(中文名为消息摘要算法第五版)。java(jdk1.6)中java.security.MessageDigest抽象类为应用程序提供信息摘要算法的功能。MD5属于hash(哈希)函数的其中一种,熟悉数据结构的读者应该记得hash(哈希)函数可应用于快速查找数据。MD5能接受任意长度的数据输入,然后以128位散列值输出。从理论上来说MD5生成的128位散列值不可能有重复的数值。例如上面的字符串"map\客栈.bmp"使用MD5加密运算后生成的128位数值是0x69BE7BEE7BAA62EB28D0758EDEF90D88。不幸的是MD5加密被山东大学数学系教授王小云,在2004年8月之前就破解了,她证明了MD5加密运算后生成的128位散列值不是惟一的。


构建实用的数字签名

有了Hash函数,我们可以来构建真正实用的数字签名了。 

发信者在发信前使用哈希算法求出待发信息的数字摘要,然后用私钥对这个数字摘要,而不是待发信息本身,进行加密而形成一段信息,这段信息称为数字签名。发信时将这个数字签名信息附在待发信息后面,一起发送过去。收信者收到信息后,一方面用发信者的公钥对数字签名解密,得到一个摘要H;另一方面把收到的信息本身用哈希算法求出另一个摘要H’,再把H和H’相比较,看看两者是否相同。根据哈希函数的特性,我们可以让简短的摘要来“代表”信息本身,如果两个摘要H和H’完全符合,证明信息是完整的;如果不符合,就说明信息被人篡改了。 

数字签名也可以用在非通信,即离线的场合,同样具有以上功能和特性。 

由于摘要一般只有128位或160位比特,比信息本身要短许多倍,USB Key或IC卡中的微处理器对摘要进行加密就变得很容易,数字签名的过程一般在一秒钟内即可完成。


什么是哈希函数

  哈希(Hash)函数在中文中有很多译名,有些人根据Hash的英文原意译为“散列函数”或“杂凑函数”,有些人干脆把它音译为“哈希函数”,还有些人根据Hash函数的功能译为“压缩函数”、“消息摘要函数”、“指纹数”、“单向散列函数”等等。 

  1、Hash算法是把任意长度的输入数据经过算法压缩,输出一个尺寸小了很多的固定长度的数据,即哈希值。哈希值也称为输入数据的数字指纹(Digital Fingerprint)或消息摘要(Message Digest)等。Hash函数具备以下的性质: 

  2、给定输入数据,很容易计算出它的哈希值; 

  3、反过来,给定哈希值,倒推出输入数据则很难,计算上不可行。这就是哈希函数的单向性,在技术上称为抗原像攻击性; 

  4、给定哈希值,想要找出能够产生同样的哈希值的两个不同的输入数据,(这种情况称为碰撞,Collision),这很难,计算上不可行,在技术上称为抗碰撞攻击性; 

  5、哈希值不表达任何关于输入数据的信息。 

  哈希函数在实际中有多种应用,在信息安全领域中更受到重视。从哈希函数的特性,我们不难想象,我们可以在某些场合下,让哈希值来“代表”信息本身。例如,检验哈希值是否发生改变,借以判断信息本身是否发生了改变。

MD5 和 SHA1 可以说是目前应用最广泛的Hash算法

=====================END=====================

转载于:https://my.oschina.net/xinxingegeya/blog/261857

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值