java md5加密,加密后为何一般用 0-9 a-f??

新手上路,请多包涵

比如下面的变量 hexDigits

/**

 * 对字符串md5加密(大写+数字) 
 * 
 * @param str 传入要加密的字符串 
 * @return  MD5加密后的字符串 
 */  
  
public static String MD5(String s) {  
    char hexDigits[]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};         

    try {  
        byte[] btInput = s.getBytes();  
        // 获得MD5摘要算法的 MessageDigest 对象  
        MessageDigest mdInst = MessageDigest.getInstance("MD5");  
        // 使用指定的字节更新摘要  
        mdInst.update(btInput);  
        // 获得密文  
        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];  
        }  
        return new String(str);  
    } catch (Exception e) {  
        e.printStackTrace();  
        return null;  
    }  
}  
阅读 4.8k
1 个回答

这不是加密,是为了文本化,因为md5出来的结果是二进制数,把二进制数转换为文本最直接的方法就是把每个byte转换成一个十六进制表达的字符串,自然输出的结果就是0~9,A~F了。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题