MD5和SHA加密实现

@Test
    public void TestMD5AndSHA() throws NoSuchAlgorithmException {
        String MD5=Md5("123456");//MD5加密算法
        System.out.println(MD5);
        String SHA=SHA256("123456");//SHA256加密算法
        System.out.println(SHA);
        //先经过MD5加密在经过SHA加密
        String Md5AndSha256=SHA256(Md5("123456"));
        System.out.println(Md5AndSha256);
    }

    public static String Md5(String str) throws NoSuchAlgorithmException {
        String MD5 ="";
        MessageDigest md5 = MessageDigest.getInstance("MD5");
        byte[] bytes = str.getBytes();
        byte[] digest = md5.digest(bytes);
        for (int i = 0; i < digest.length; i++) {
            //摘要字节数组中各个字节的"十六进制"形式.
            int j = digest[i];
            j = j & 0x000000ff;
            String s1 = Integer.toHexString(j);
            if (s1.length() == 1) {
                s1 = "0" + s1;
            }
            MD5 += s1;
        }
        return MD5;
    }


    public  static String SHA256(String str){
        MessageDigest messageDigest;
        String encodeStr = "";
        try {
            messageDigest = MessageDigest.getInstance("SHA-256");
            messageDigest.update(str.getBytes("UTF-8"));
            encodeStr = byte2Hex(messageDigest.digest());
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
       return encodeStr;
    }


    private static String byte2Hex(byte[] bytes){
        StringBuffer stringBuffer = new StringBuffer();
        String temp = null;
        for (int i=0;i<bytes.length;i++){
            temp = Integer.toHexString(bytes[i] & 0xFF);
            if (temp.length()==1){
                stringBuffer.append("0");
            }
            stringBuffer.append(temp);
        }
        return stringBuffer.toString();
    }

总结MD5算法和SHA都是不可逆的算法,网上的破解方法都是穷举出来的,只要密码长度长一点,是不可能解出来的

MD5算法破解比较容易,加密速度比较快

SHA算法破解比较难,加密速度比较慢

一起使用虽然很保密解码几乎不可能,但是会浪费很多开销。

原文地址:https://www.cnblogs.com/CY-947205926/p/8898138.html