我正在尝试根据系统时间的舍入值计算哈希值,以便我有时间在另一台设备上输入值并检查它是否是相同的哈希值。当我运行代码时,它向我显示localTime
变量具有相同的值,但我得到了摘要的不同值,并且无法找出原因。
public static String getTime()
{
String localTime = "";
Calendar cal = Calendar.getInstance();
long mins = cal.getTimeInMillis()/10000;
localTime = Long.toString(mins);
System.out.println(localTime);
byte [] digest = null;
try {
MessageDigest md = MessageDigest.getInstance("MD5");
md.update(localTime.getBytes());
digest = md.digest();
md.reset();
} catch (NoSuchAlgorithmException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return digest.toString();
}
答案 0 :(得分:1)
问题是最后一行。如果返回digest.toString()
,则返回字节数组的字符串表示形式(类似于[B@12345678]
)。如果您真的想从String
构建byte[]
,我强烈建议您对阵列进行Base64编码:
return new String(Base64.encode(digest));
你会发现Base64是Java8的一部分,如果你使用旧的东西,你会在Apache编解码器,Spring utils等中找到它......