一、常用加密算法
常见的加密算法可分为三大类:Hash算法、对称加密,非对称加密。
1.Hash算法:加密之后不能解密,因为没有秘钥,一般用于数据验证。
Base64、MD5、HMAC、SHA
2.对称加密:加密和解密使用相同的密钥(加解密时间快,安全性缺失)。
DES、3DES、AES
3.非对成加密:加密和解密使用不同的密钥。公钥和私钥 (加解密时间长)
RSA、ECC、DSA
公钥与私钥是一对,如果用公钥对数据进行加密,只有用对应的私钥才能解密;如果用私钥对数据进行加密,那么只有用对应的公钥才能解密。
4.混合加密
由于以上加密算法都有各自的缺点(RSA加密速度慢、AES密钥存储问题、MD5加密不可逆),因此实际应用时常将几种加密算法混合使用。
例如:RSA+AES:
采用RSA加密AES的密钥,采用AES对数据进行加密,这样集成了两种加密算法的优点,既保证了数据加密的速度,又实现了安全方便的密钥管理。
那么,采用多少位的密钥合适呢?一般来讲密钥长度越长,安全性越高,但是加密速度越慢。所以密钥长度也要合理的选择,一般RSA建议采用1024位的数字,AES建议采用128位即可。
5.java cipher 自带加密 实现des aes des2 rsa 等
ASE 加密实例:
- /**
- * content: 加密内容
- * slatKey: 加密的盐,16位字符串
- * vectorKey: 加密的向量,16位字符串
- */
- public String encrypt(String content, String slatKey, String vectorKey) throws Exception {
- Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
- SecretKey secretKey = new SecretKeySpec(slatKey.getBytes(), "AES");
- IvParameterSpec iv = new IvParameterSpec(vectorKey.getBytes());
- cipher.init(Cipher.ENCRYPT_MODE, secretKey, iv);
- byte[] encrypted = cipher.doFinal(content.getBytes());
- return Base64.encodeBase64String(encrypted);
- }
- /**
- * content: 解密内容(base64编码格式)
- * slatKey: 加密时使用的盐,16位字符串
- * vectorKey: 加密时使用的向量,16位字符串
- */
- public String decrypt(String base64Content, String slatKey, String vectorKey) throws Exception {
- Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
- SecretKey secretKey = new SecretKeySpec(slatKey.getBytes(), "AES");
- IvParameterSpec iv = new IvParameterSpec(vectorKey.getBytes());
- cipher.init(Cipher.DECRYPT_MODE, secretKey, iv);
- byte[] content = Base64.decodeBase64(base64Content);
- byte[] encrypted = cipher.doFinal(content);
- return new String(encrypted);
- }