MessageDigest md5 = MessageDigest.getInstance("md5");
for (int i = 0; i < 10; i++) {
String s = "" + i;
byte[] bs = s.getBytes("UTF-8");
md5.update(bs);
String currMd5 = ...;
System.out.println(currMd5);
}
根据Javadocs:
public byte [] digest() 通过执行填充等最终操作来完成哈希计算。 完成此次通话后,摘要会重置。
因此无法使用。
在每次调用currMd5
之后,是否有可能以某种方式产生update
,即到目前为止基于所有输入递增?使用MD5不是约束,即任何合理的散列都应该有效。
答案 0 :(得分:0)
好吧,一个解决方案似乎是克隆:
MessageDigest md5 = MessageDigest.getInstance("md5");
for (int i = 0; i < 10; i++) {
String s = "" + i;
byte[] bs = s.getBytes("UTF-8");
md5.update(bs);
MessageDigest md5c = (MessageDigest) md5.clone();
byte[] bytes = md5c.digest();
String currentMd5 = javax.xml.bind.DatatypeConverter.printHexBinary(bytes);
System.out.println("md5: " + currentMd5);
}
产生:
md5: CFCD208495D565EF66E7DFF9F98764DA
md5: 96A3BE3CF272E017046D1B2674A52BD3
md5: D2490F048DC3B77A457E3E450AB4EB38
md5: EB62F6B9306DB575C2D596B1279627A4
md5: 4100C4D44DA9177247E44A5FC1546778
md5: D6A9A933C8AAFC51E55AC0662B6E4D4A
md5: 124BD1296BEC0D9D93C7B52A71AD8D5B
md5: 2E9EC317E197819358FBC43AFCA7D837
md5: 22975D8A5ED1B91445F6C55AC121505B
md5: 781E5E245D69B566979B86E28D23F2C7
我希望有更好的解决方案,而不是那么喜欢克隆......