java - 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());
        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"); 的调用曾经抛出一个 NoSuchAlgorithmException,您的程序稍后会在此处崩溃 md.update (key.getBytes());NullPointerException

关于java - MD5 对相同的输入返回不同的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25542511/

相关文章:

java - 确定 Java 中的等效数组

java - 如何使用 Java 设置随机生成的字母数字优惠券代码的有效期

android - 如何使用 Eclipse 中生成的 keystore 文件从 Android-Studio 发布 Android 应用程序?

python - 在 python 3 中散列数组或对象

java - 在 JNI 函数中将 jstring 写入 logcat

java - 使用解析图像从 Gridview 到 ViewPager

Android Runtime(ART) 是虚拟机?

Android 模拟器(来自 Android Studio)滞后

md5 - 在 GPU 上计算单个 MD5 SHA1 哈希值

java - 使用 PBEWithMD5AndDES 加密字符串以与 Java 存储的哈希进行比较