zoukankan      html  css  js  c++  java
  • Java中WEAK_PASSWORD_HASH的修改策略

      在采用SHA-256对数据进行加密时,我们可以直接采用下面的方式进行处理:

    public static String encodeBySha256(String content) {
         String encode = "";
         try {
             MessageDigest messageDigest = MessageDigest.getInstance("SHA-256");
             messageDigest.update(content.getBytes("UTF-8"));
             encode = bytesToHex(messageDigest.digest());
         } catch (Exception e) {
             System.out.println(e.getMessage());
         }
         return encode;
    }
    
    public static String bytesToHex(byte... src) {
        if (src == null || src.length <= 0) {
            return null;
        }
       StringBuilder sb = new StringBuilder();
        for (int i = 0; i < src.length; i++) {
            int value = src[i] & 0xFF;
            String hexValue = Integer.toHexString(value);
            if (hexValue.length() < 2) {
                sb.append(0);
            }
            sb.append(hexValue);
        }
        return sb.toString();
    }

      上述代码能够实现对数据的SHA-256加密,但是会在encode = bytesToHex(messageDigest.digest());这一行提示WEAK_PASSWORD_HASH问题,这主要是因为不适宜直接调用messageDigest.digest()方法。那如何解决呢,我们可以采用反射的方式来处理,直接看下面修改后的代码:

    public static String encodeBySha256(String content) {
         String encodeString = "";
         try {
             Class<?> mdClass = Class.forName("java.security.MessageDigest");
             Method method = mdClass.getMethod("getInstance", String.class);
             MessageDigest messageDigest = (MessageDigest) method.invoke(null, "SHA-256");
             messageDigest.update(content.getBytes("UTF-8"));
             method = mdClass.getMethod("digest");
             byte[] bytes = (byte[]) method.invoke(messageDigest);
             encodeString = bytesToHex(bytes);
         } catch (Exception exception) {
             System.out.println(exception.getMessage());
         }
        return encodeString;
    }

      经过上述修改后,就不再报WEAK_PASSWORD_HASH的问题。

      延伸:若是采用MD5的加密方式的话,只需要在method.invoke(null, "SHA-256")修改为method.invoke(null, "MD5")即可。

    ------20200117勉

  • 相关阅读:
    UVA
    Codeforces 898F 字符串hash
    牛客练习赛11 B trie树+拓扑判环 E 分治求平面最近点对
    Codeforces Round #459 (Div. 2) C 思维,贪心 D 记忆化dp
    2017-2018 ACM-ICPC Nordic Collegiate Programming Contest (NCPC 2017) D bfs思维 E bfs I Floyd找最小环 K 二分
    Educational Codeforces Round 37 E 补图求连通块 bfs+链表优化 F 线段树套路
    Codeforces 919E 数论,思维
    大数加法(主要是想记住模板)
    基础图论3
    简单并查集2hdu1213
  • 原文地址:https://www.cnblogs.com/bien94/p/12206358.html
Copyright © 2011-2022 走看看