时间戳完整性校验(Checksum)求助:需随秒数变化更新
解决Checksum不随时间戳秒数变化的问题
嘿,我看你遇到了时间戳秒数明明在变,但Checksum却纹丝不动的问题——这大概率是你的Checksum计算逻辑没把秒数真正纳入计算范围,或者文件写入/读取环节出了疏漏。我给你拆解下可能的原因,再附上修正后的代码参考:
常见问题原因
- 你的Checksum计算逻辑根本没用到包含秒数的完整时间戳,比如只取了小时、分钟部分,或者输入的是固定值
- 写入文件时没有刷新缓冲,导致磁盘上的文件内容还是旧的,计算Checksum时读的是老数据
- 虽然定义了
ddMMYYHHMMss的格式,但实际代码里可能写错了(比如漏了ss),导致时间戳没包含秒数
修正后的代码示例
下面是完整的可运行代码,核心是确保秒数完整参与Checksum计算,并且文件写入后及时刷新:
import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.PrintWriter; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import java.text.SimpleDateFormat; import java.util.Date; public class Checksum { public static void main(String[] args) throws IOException, NoSuchAlgorithmException { // 1. 生成带秒数的完整时间戳 Date currentDate = new Date(); SimpleDateFormat timestampFormat = new SimpleDateFormat("ddMMYYHHMMss"); String timestamp = timestampFormat.format(currentDate); File targetFile = new File("D:/test.txt"); PrintWriter writer = new PrintWriter(targetFile); // 2. 将最新时间戳写入文件(确保内容随秒数变化) writer.write(timestamp); writer.flush(); // 关键:强制把缓冲内容写入磁盘 writer.close(); // 3. 计算文件的Checksum(这里用MD5示例,可替换为你需要的算法) MessageDigest md = MessageDigest.getInstance("MD5"); FileInputStream fis = new FileInputStream(targetFile); byte[] buffer = new byte[1024]; int bytesRead; while ((bytesRead = fis.read(buffer)) != -1) { md.update(buffer, 0, bytesRead); } fis.close(); // 把字节数组转成十六进制字符串,方便查看 StringBuilder checksumBuilder = new StringBuilder(); for (byte b : md.digest()) { checksumBuilder.append(String.format("%02x", b)); } String checksum = checksumBuilder.toString(); // 打印结果验证 System.out.println("当前时间戳: " + timestamp); System.out.println("对应Checksum: " + checksum); } }
关键注意点
- 确认时间戳有效性:先单独打印
timestamp,确保每次运行秒数都在变化,排除格式定义错误的问题 - 必须刷新写入流:
PrintWriter默认会缓冲数据,如果不调用flush()或close(),内容可能还在内存里,磁盘文件没更新,Checksum自然不变 - 检查Checksum输入源:如果你的Checksum不是计算文件内容,而是直接计算某个字符串,一定要确保这个字符串包含最新的秒数(比如直接把
timestamp传入加密逻辑)
排查小技巧
- 运行程序后手动打开
D:/test.txt,看里面的内容是不是最新的时间戳 - 在Checksum计算前,打印输入的原始数据(比如文件内容或时间戳字符串),确认数据确实随秒数变化
内容的提问来源于stack exchange,提问作者swapnil dahule
相关产品推荐
相关产品推荐

