emmetyang

导航

 

一、常用加密算法

常见的加密算法可分为三大类:Hash算法、对称加密,非对称加密。

1.Hash算法:加密之后不能解密,因为没有秘钥,一般用于数据验证。

Base64MD5、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 加密实例:

  1. /**
  2. * content: 加密内容
  3. * slatKey: 加密的盐,16位字符串
  4. * vectorKey: 加密的向量,16位字符串
  5. */
  6. public String encrypt(String content, String slatKey, String vectorKey) throws Exception {
  7. Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
  8. SecretKey secretKey = new SecretKeySpec(slatKey.getBytes(), "AES");
  9. IvParameterSpec iv = new IvParameterSpec(vectorKey.getBytes());
  10. cipher.init(Cipher.ENCRYPT_MODE, secretKey, iv);
  11. byte[] encrypted = cipher.doFinal(content.getBytes());
  12. return Base64.encodeBase64String(encrypted);
  13. }

 

  1. /**
  2. * content: 解密内容(base64编码格式)
  3. * slatKey: 加密时使用的盐,16位字符串
  4. * vectorKey: 加密时使用的向量,16位字符串
  5. */
  6. public String decrypt(String base64Content, String slatKey, String vectorKey) throws Exception {
  7. Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
  8. SecretKey secretKey = new SecretKeySpec(slatKey.getBytes(), "AES");
  9. IvParameterSpec iv = new IvParameterSpec(vectorKey.getBytes());
  10. cipher.init(Cipher.DECRYPT_MODE, secretKey, iv);
  11. byte[] content = Base64.decodeBase64(base64Content);
  12. byte[] encrypted = cipher.doFinal(content);
  13. return new String(encrypted);
  14. }

 

posted on 2021-04-16 10:47  emmetyang  阅读(203)  评论(0)    收藏  举报