Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/193.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java MD5为同一输入返回不同的值_Java_Android_Md5 - Fatal编程技术网

Java MD5为同一输入返回不同的值

Java MD5为同一输入返回不同的值,java,android,md5,Java,Android,Md5,我在Android上,所以它只是java,我有相同的输入字符串,但每次得到的值不同。我遗漏了什么?谢谢 private String getShortenedKey(String key) { String shortenedKey=null; MessageDigest md = null; LogUtils.LOGD(HASH_ALGO, "before key: "+ System.currentTimeMillis());

我在Android上,所以它只是java,我有相同的输入字符串,但每次得到的值不同。我遗漏了什么?谢谢

private String getShortenedKey(String key) {
        String shortenedKey=null;
        MessageDigest md = null;
        LogUtils.LOGD(HASH_ALGO, "before key: "+ System.currentTimeMillis());
        try {
            md = MessageDigest.getInstance("MD5");
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
            shortenedKey = key;
        }
        LogUtils.LOGD(HASH_ALGO, "after key: "+ System.currentTimeMillis());

        md.update(key.getBytes());
        byte[] shortenedBytes = md.digest();
        shortenedKey = String.valueOf(shortenedBytes);
        return shortenedKey;
    }
输入字符串:

{"config":{"wp":"(1.000000,1.000000,1.000000,1.000000)","v":"8","unit":"auto","ef":true,"ws":1,"tt":0,"cs":1},"items":[{"startTime":1409180400,"id":"WorkXYZ@habit.skedgo.com_1409180400","class":"event","endTime":1409209200,"location":{"lng":151.20785,"lat":-33.85926},"priority":0},{"startTime":1409148000,"id":"HomeXYZ@habit.skedgo.com_1409148000","class":"event","endTime":1409234340,"location":{"lng":151.18089,"lat":-33.89153},"priority":0}]}
更新:这么多有效答案,谢谢。我选择最容易改变的一个。干杯。

这句话

shortenedKey = String.valueOf(shortenedBytes);
不是做你想做的事

为了获得数组中字节值的字符串表示形式,需要实现一个小实用方法


此外,如果调用
MessageDigest.getInstance(“MD5”)
是否曾抛出
nosuchagorithmexception
您的程序稍后会在这里崩溃
md.update(key.getBytes())NullPointerException

检查修改后的版本。 可以对字节使用base64编码

private String getShortenedKey(String key) {
    String shortenedKey=null;
    MessageDigest md = null;
    LogUtils.LOGD(HASH_ALGO, "before key: "+ System.currentTimeMillis());
    try {
        md = MessageDigest.getInstance("MD5");

        md.update(key.getBytes());
        byte[] shortenedBytes = md.digest();
        shortenedKey = Base64.encodeToString(shortenedBytes, Base64.NO_WRAP);
    } catch (NoSuchAlgorithmException e) {
        e.printStackTrace();
        shortenedKey = key;
    }
    LogUtils.LOGD(HASH_ALGO, "after key: "+ System.currentTimeMillis());

    return shortenedKey;
}

正如@Henry在回答时解释的那样,
String.valueOf(shortenedBytes)
必须更改

替换这个

shortenedKey = String.valueOf(shortenedBytes);
对此,

shortenedKey = new String(Base64.encode(shortenedBytes))
您可以从中使用Base64


谢谢,我已经跟踪了
nosuchagorithmexception
,如果出现这种情况,请使用原始密钥。