加密类型
1. 对称加密
又称作私钥加密。(举例:家里大门开门和锁门用的是同一把钥匙)加密和解密使用相同的密钥。密钥:在加密算法当中,将明文转换为密文,或者密文转换为明文的时候,需要用到的参数。分为公钥和私钥。
**常见的对称加密算法有:AES(wifi密码)、DES(wifie密码)、RC5(电视遥控器)
- DES Data Encryption Standard
- AES: Advanced Encryption Standard**
特点:在对称加密算法中,双方使用的密钥相同,要求解密方事先必须知道加密密钥。其特点是算法公开、计算量小、加密速度快、加密效率高,适合加密比较大的文件。不足之处是,通信双方都使用同样的密钥,安全性得不到保证。此外,用户每次使用该算法,需要保证密钥的唯一性,使得双方所拥有的密钥数量很大,密钥管理较为麻烦。同样,只有一把密钥,如果密钥暴露,文件就会被暴露。
2. 非对称加密
与对称加密算法不同,非对称加密算法需要两个密钥:公开密钥和私有密钥。每个人拥有这两个密钥,公开密钥对外公开,任何人都可以获得;私有密钥不公开,单独给指定用户的。如果用公开密钥对数据进行加密,只有用对应的私有密钥才能解密;如果用私有密钥对数据进行加密,那么只有对应的公开密钥才能解密。
也就是说,如果某个用户得到了公钥加密后的信息,只能用该用户的解密私钥才能解密。如果知道了其中一个,并不能计算出另外一个,因此如果公开了一对密钥中的一个,并不会危害到另外一个的秘密性质。
RSA加密算法是最常用的非对称加密算法。另外,还有美国国家标准局提出的DSA。
特点:非对称加密算法的保密性比较好,消除了最终用户交换密钥的需要,但加密和解密花费时间长、速度慢,它不适合于对文件加密而只适合于对少量数据进行加密。
3. 单向加密
该算法在加密过程中不需要使用密钥,输入明文后由系统直接经过加密算法处理成密文,密文无法解密。只有重新输入明文,并经过同样的加密算法处理,得到相同的密文并被系统重新识别后,才能真正解密。
特点:该算法计算复杂,通常只在数据量有限的情形下使用,如广泛应用在计算机系统中的口令加密。近年来,单向加密的应用领域正在逐渐增大。
常见的:MD5加密(RSA公司发明),SHA(Secure Hash Algorithm)(美国国家安全局设计)
4. RSA加密算法
什么是RSA加密?
RSA加密算法是最常用的非对称加密算法。也是目前为止最安全的非对称加密算法。
特点:加密速度比较慢一些,但是安全系数比较高。
秘钥对的话需要程序生成.不能我们自己定义
加密/解密:公钥加密-->私钥解密
public static byte[] encryptByPublicKey(byte[] data, String publicKey)`//公钥加密
public static byte[] decryptByPrivateKey(byte[] encryptedData, String privateKey) `//私钥解密
加密/解密:私钥加密-->公钥解密
public static byte[] encryptByPrivateKey(byte[] data, String privateKey) `//私钥加密
public static byte[] decryptByPublicKey(byte[] encryptedData, String publicKey)//公钥解密
在实际开发中,都有相应的工具提供RsaUtils,不需要去操心算法的内部实现原理(互质关系、欧拉函数、欧姆定理等)。这些都是数学家们花了几十年搞出来的心血。
名字的来源
RSA是1977年由罗纳德?李维斯特(Ron Rivest)、阿迪?萨默尔(Adi Shamir)和伦纳德?奥德曼(Leonard Adleman)一起提出的。RSA就是他们三人姓氏开头字母拼在一起组成的。
5. MD5加密算法
全称是Message-Digest Algorithm 5,在90年代初由MIT的计算机科学实验室和RSA Data Security Inc发明,经MD2、MD3和MD4发展而来。
它是哪种机密类型?
根据特点而定
md5算法可用于对一段信息进行不可逆的变换运算,产生一个32位的字符串。如果对输入信息作了任何形式的改变,对改变后的信息再次进行MD5运算所产生的数字摘要,与改变前的内容所运算出的MD5数字摘要都是不同的。MD5不是加密,因为结果是不能恢复出原始数据的。
MD5加密的特点
MD5加密既不是对称加密算法,也不是非对称加密算法,属于单向加密算法。因为它不可解密,只能通过匹配的方式间接解密。因此安全系数最高。
开发中如何使用MD5加密?
使用MD5Utils工具类
MD5加密的过程:
1. 先将指定的字符串转换为一个16位的byte[]
2. 遍历取出数组中的每个byte元素
3. 将取出的byte值与255(0xff)做与运算(&)后得到一个255以内的数值
4. 将得到的数值转换为16进制的字符串, 如果它只有一位, 在它的前面补0
5. 将生成的16个二位16进制形式的字符串连接起来, 它就是md5加密后的32位字符串