本帖最后由 郑委员 于 2019-2-21 12:00 编辑
Java开发中常用的三种加密方式
前言:
常用术语解释:
非对称加密:加密和解密所使用的的密钥不一致,通过非对称算法实现。
对称加密: 加密和解密所使用的密码是一致,使用的是对称算法。
PUBLIC KEY:公钥。
PRIVATE KEY: 私钥。
信息摘要:通过一个算法使固定数数据产生一个特定的信息摘要。
1.非对称加密。
典型的如RSA,AES等,常见方法,使用openssl ,keytools等工具生成一对公私钥对,使用被公钥加密的数据可以使用私钥来解密,反之亦然(被私钥加密的数据也可以被公钥解密) 。在实际使用中私钥一般保存在发布者手中,是私有的不对外公开的,只将公钥对外公布,就能实现只有私钥的持有者才能将数据解密的方法。 这种加密方式安全系数很高,因为它不用将解密的密钥进行传递,从而没有密钥在传递过程中被截获的风险,而破解密文几乎又是不可能的,但是算法的效率低,所以常用于很重要数据的加密,常和对称配合使用,使用非对称加密的密钥去加密对称加密的密钥。
2.对称加密。
加密者和解密者使用相同的密码,这种方式的优点是加解密效率高,缺点是安全系统偏低,因为中除需要传递密钥,所以有被截获的风险。传递密钥的过程常需要和对称加密方式配合使用,如上所述。 常见的这种方式有 DES,AES.
3.信息摘要。
将一段数据根据一定的算法换算出一个结果,相同的数据得出的结果肯定是唯一的,不同数据算出的结果肯定是不同的。这种方式常用于签名,如果数据被篡改了,那么验证肯定就不能通过。典型的算法如md5等。 我所知在web中使用的例子:浏览器用服务器提交密码时可用md5算法将密码换算成md5值传递,而服务器的数据库也基本存的是密码的md5(防止数据库被攻击泄露后直接被看到密码),所以可以直接比较md5就知道密码是否正确。虽然通过md5值逆向求出原值几乎不可能(之前好像听说过有人能办到),但是由于使用频繁专门的md5值数据库记录了很多值所对应的md5值 ,所以有可能会被查到。
|
|