MD5加密java/mysql。在Java中,MD5生成31个字节,而不是32个字节

MD5加密java/mysql。在Java中,MD5生成31个字节,而不是32个字节,java,php,android,mysql,md5,Java,Php,Android,Mysql,Md5,我有一个php脚本,用于在数据库中插入用户名和md5password,其中包含一个用于注册功能的mysql查询,以及一个用于选择用于登录功能的用户名和密码的脚本 对于注册,我从我的android应用程序发送数据,我发送的密码没有加密。Php脚本使用mysql函数md5password进行加密 对于登录,我从应用程序发送加密密码 我的问题是java的MD5和mysql的MD5之间有一个字节的差异 例如,我在数据库中存储了mysql'md5生成的md5密码: 900150983cd24fb0d69

我有一个php脚本,用于在数据库中插入用户名和md5password,其中包含一个用于注册功能的mysql查询,以及一个用于选择用于登录功能的用户名和密码的脚本

对于注册,我从我的android应用程序发送数据,我发送的密码没有加密。Php脚本使用mysql函数md5password进行加密

对于登录,我从应用程序发送加密密码

我的问题是java的MD5和mysql的MD5之间有一个字节的差异

例如,我在数据库中存储了mysql'md5生成的md5密码:

 900150983cd24fb0d6963f7d28e17f72
java使这个md5:

 90150983cd24fb0d6963f7d28e17f72
另一个例子: mysql->0cc175b9c0f1b6a831c399e269772661 java->cc175b9c0f1b6a831c399e269772661

我可以用java实现所有md5加密,也可以用mysql实现所有加密,但我想了解这种差异的原因

这是我的java MD5编目器:

/**
 * Utility class for MD5 management.
 *
 * @author Massimo Carli - Jul 12, 2013
 */
public final class MD5Utility {

    /*
     * The FF value.
     */
    private static final int FF_HEX_VALUE = 0xFF;

    // Private constructor
    private MD5Utility() {
        throw new AssertionError("Never instantiate this!");
    }

    /**
     * Calculate MD5 for String src.
     *
     * @param src The string to check
     * @return MD5 for src or null if some error occured
     */
    public static String md5(String src) {
        try {
            // Create MD5 Hash
            MessageDigest digest = MessageDigest.getInstance("MD5");
            digest.update(src.getBytes());
            byte[] messageDigest = digest.digest();
            // Create Hex String
            StringBuffer hexString = new StringBuffer();
            for (int i = 0; i < messageDigest.length; i++) {
                hexString.append(Integer.toHexString(FF_HEX_VALUE & messageDigest[i]));
            }
            String md5 = hexString.toString();
            return md5;
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        }
        return null;
    }

    /**
     * Check a String with its MD5.
     *
     * @param str The string
     * @param md5 The MD5 to check
     * @return true if ok, false otherwise
     */
    public static boolean checkMD5(String str, String md5) {
        String pwdMD5 = md5(str);
        // We return the test
        boolean success = md5.equals(pwdMD5);
        return success;
    }

}

有人能帮我吗?对不起,我的英语不好

用java试试这个方法。此方法提供与mysql md5相同的哈希

public static String getMD5Hash(String s) throws NoSuchAlgorithmException {

String result = s;
if (s != null) {
    MessageDigest md = MessageDigest.getInstance("MD5"); // or "SHA-1"
    md.update(s.getBytes());
    BigInteger hash = new BigInteger(1, md.digest());
    result = hash.toString(16);
    while (result.length() < 32) { // 40 for SHA-1
        result = "0" + result;
    }
}
return result; }

为什么不在php中使用md5,而不是在java中使用md5,并将其发送到phpAvoid md5,然后研究类似blowfish@IndraKumarS如果我从手机发送未加密的密码,安全性如何?为什么要添加0?我知道那总是少了一个0。我想知道为什么总是缺少0字符。本网站将帮助了解原因。大概