Md5加密中文的坑

来源:互联网 发布:s7200plc通讯端口设置 编辑:程序博客网 时间:2024/06/06 09:50
遇到过加密中文参数,一直都是用一个通用的类来加密

public static String MD5(String str)      {          MessageDigest md5 = null;          try          {              md5 = MessageDigest.getInstance("MD5");         }catch(Exception e)          {              e.printStackTrace();              return "";          }                char[] charArray = str.toCharArray();          byte[] byteArray = new byte[charArray.length];                    for(int i = 0; i < charArray.length; i++)          {              byteArray[i] = (byte)charArray[i];          }          byte[] md5Bytes = md5.digest(byteArray);                    StringBuffer hexValue = new StringBuffer();          for( int i = 0; i < md5Bytes.length; i++)          {              int val = ((int)md5Bytes[i])&0xff;              if(val < 16)              {                  hexValue.append("0");              }              hexValue.append(Integer.toHexString(val));          }          return hexValue.toString();      } 



这个在加密非中文的情况下 都是正常的。但是今天遇到需要加密中文的情况就死活不一致,最后发现是md5 方法不一样导致的


比较正常的md5方法 

 
public static String MD5(String inStr) {        byte[] hash;        try {            hash = MessageDigest.getInstance("MD5").digest(inStr.getBytes("UTF-8"));        } catch (NoSuchAlgorithmException var7) {            throw new RuntimeException("MD5 should be supported?", var7);        } catch (UnsupportedEncodingException var8) {            throw new RuntimeException("UTF-8 should be supported?", var8);        }        StringBuilder hex = new StringBuilder(hash.length * 2);        byte[] var6 = hash;        int var5 = hash.length;        for(int var4 = 0; var4 < var5; ++var4) {            byte b = var6[var4];            if((b & 255) < 16) {                hex.append("0");            }            hex.append(Integer.toHexString(b & 255));        }        return hex.toString();    }

测试demo

原创粉丝点击