md5加密

Android 码拜 6年前 (2016-06-10) 653次浏览
下面的截图是反编译后的一段md5的加密方法,能加密出32位的密码?
1(能,怎么用java实现)
2(不能,具体能加密出多少位的密码)
md5加密
分数不够了只有这么多了
解决方案

10

md5 严格来说,应该叫hash函数,而不是加密函数
md5固定生成16字节的结果,可以转换成32位16进制的字符串

10

标准的md5处理后得到128 bit数据。所以digtest()返回的是一个长度为16的byte数组(16 * 8 = 128)。上面反编译出来的结果,应该不是一个通常计算md5的做法。通常的做法是,

byte[] md = mdInst.digest();
			// 把密文转换成十六进制的字符串形式
			int j = md.length;
			char str[] = new char[j * 2];
			int k = 0;
			for (int i = 0; i < j; i++) {
				byte byte0 = md[i];
				str[k++] = hexDigits[byte0 >>> 4 & 0xf];
				str[k++] = hexDigits[byte0 & 0xf];
			}

上面的str是一个长度为32的byte数组,转成string得到长度为32的md5值,删除前8位、后位8位,可以得到16位的md5值。
///

10

public class MD5Util {  
  
    public final static String MD5(String s) {  
        try {  
            byte[] btInput = s.getBytes();  
            MessageDigest mdInst = MessageDigest.getInstance("MD5");  
            mdInst.update(btInput);  
            byte[] md = mdInst.digest();  
            StringBuffer sb = new StringBuffer();  
            for (int i = 0; i < md.length; i++) {  
                int val = ((int) md[i]) & 0xff;  
                if (val < 16)  
                    sb.append("0");  
                sb.append(Integer.toHexString(val));  
  
            }  
            return sb.toString();  
        } catch (Exception e) {  
            return null;  
        }  
    }  
}


使用之前的

char hexDigits[] = {   "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d",   "e", "f"};

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明md5加密
喜欢 (0)
[1034331897@qq.com]
分享 (0)