md5加密,同样的代码得到不同的加密结果(已解决)

  场景:

  开发环境(windows下)调用第三方接口验签通过,发测试环境(linux下)后死活验签通过不了

  原因:

  md5是一项成熟的加密技术,问题应该在代码里,查了查感觉可能是字符编码的问题,导致加签没通过,这样的话只能是环境导致的字符编码出现问题,就我所知的有getBytes()方法是得到一个操作系统默认的编码格式的字节数组,发现公共代码里进行md5加密是要进行转字节的

    /**
     * md5加密
     */
    public static String MD5Encode(String origin) {
        String resultString = null;
        try {
            resultString = new String(origin);
            MessageDigest md = MessageDigest.getInstance("MD5");
            resultString = byteArrayToHexString(md.digest(resultString
                .getBytes()));
        } catch (NoSuchAlgorithmException e) {
        }
        return resultString;
    }

  所以这里的getBytes()不确定性太大,需要指定编码方式来降低耦合(代码与环境的耦合)。

  解决方法:

  将getBytes()方法指定具体的编码方式,如:getBytes("UTF-8")

    /**
     * md5加密
     */
    public static String MD5Encode(String origin) {
        String resultString = null;
        try {
            resultString = new String(origin);
            MessageDigest md = MessageDigest.getInstance("MD5");
            resultString = byteArrayToHexString(md.digest(resultString
                .getBytes("UTF-8")));
        } catch (NoSuchAlgorithmException e) {
        }
        return resultString;
    }