Java MD5为同一输入返回不同的值
我在Android上,所以它只是java,我有相同的输入字符串,但每次得到的值不同。我遗漏了什么?谢谢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());
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
,如果出现这种情况,请使用原始密钥。