[关闭]
@Tyhj 2019-03-08T15:55:00.000000Z 字数 1195 阅读 907

MD5加密

加密


为了数据安全经常会使用到加密技术,学习了一下Android中会用到的加密方法和场景

MD5

主要是对于密码的加密,APP中输入账号密码,本地保存或传输到服务器都可能被获取到;直接操作密码肯定是不安全的,一般是进行MD5加密后再保存或者传输;MD5加密是不可逆的,加密后无法解密,直接将加密后的数据作为密码;这样就算得到用户密码的MD5值,也无法获取用户的密码,就算是管理员也无法得知用户密码

MD5其他的用法,防止被篡改,可以对一些数据先计算MD5,传输后再计算MD5,如果数据被修改了,MD5肯定就变了

  1. /**
  2. * 获取MD5字符串
  3. */
  4. public static String getMD5(String content) {
  5. try {
  6. MessageDigest digest = MessageDigest.getInstance("MD5");
  7. digest.update(content.getBytes());
  8. return getHashString(digest);
  9. } catch (NoSuchAlgorithmException e) {
  10. e.printStackTrace();
  11. }
  12. return null;
  13. }
  14. /**
  15. * 将字节数组转换成十六进制字符串
  16. *
  17. * @param digest
  18. * @return
  19. */
  20. private static String getHashString(MessageDigest digest) {
  21. StringBuilder builder = new StringBuilder();
  22. for (byte b : digest.digest()) {
  23. builder.append(Integer.toHexString((b >> 4) & 0xf));
  24. builder.append(Integer.toHexString(b & 0xf));
  25. }
  26. return builder.toString();
  27. }

MD5加盐

虽然无法解密获取密码,但是因为用户的密码是比较短的,如果把可能的密码先MD5处理,保存到数据库,然后再一个个跟你的MD5结果匹配,如果相同那么就获取到了密码;

所以有一种比较好的方法,在用户密码的基础上再加上一些复杂的字符串再计算 MD5,那反推出原始密码就变得非常困难了。加上的这段长字符,我们称为盐(Salt),通过这种方式加密的结果,我们称为 加盐 Hash;

加盐也有不同的方法,简单的可以使用固定的字符串,安全性更高的,生成随机字符串,随机生成的SALT和密码一样也需要相应的保存和获取

  1. /**
  2. * 设置一个SALT增加复杂度
  3. */
  4. private final static String SALT = "qrqhhufadfhsdqwer";
  5. /**
  6. * 获取加盐的MD5字符串
  7. */
  8. public static String getMD5WithSalt(String content) {
  9. return getMD5(getMD5(content) + SALT);
  10. }
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注