用于保持时间戳完整性的校验和
Checksum for keeping the integrity of the timestamp
我有基本上是 "ddMMYYHHMMss" 的时间戳。我想做的是每次我 运行 程序秒值改变但我的校验和保持不变。谁能帮我这个。我希望每次秒(时间)改变时校验和都应该改变。
public class Checksum {
public static void main(String[] args) throws IOException {
File f = new File("D:/test.txt");
PrintWriter pw = new PrintWriter(f);
if(!f.exists()){
f.createNewFile();
}
Date d = new Date();
SimpleDateFormat sd = new SimpleDateFormat("ddMMYYHHmmss");
String formatteddate = sd.format(d);
System.out.println(formatteddate);
pw.println(formatteddate);
pw.close();
BufferedReader br = new BufferedReader(new FileReader(f));
String line = null;
while((line = br.readLine()) != null){
break;
}
br.close();
System.out.println("MD5 : " + toHex(Hash.MD5.checksum(line)));
System.out.println("SHA1 : " + toHex(Hash.SHA1.checksum(line)));
System.out.println("SHA256 : " + toHex(Hash.SHA256.checksum(line)));
System.out.println("SHA512 : " + toHex(Hash.SHA512.checksum(line)));
}
private static String toHex(byte[] bytes) {
return DatatypeConverter.printHexBinary(bytes);
}
}
class CheckSumGenerator {
public enum Hash {
MD5("MD5"), SHA1("SHA1"), SHA256("SHA-256"), SHA512("SHA-512");
private String name;
Hash(String name) {
this.name = name;
}
public String getName() {
return name;
}
public byte[] checksum(String input) {
try {
MessageDigest digest = MessageDigest.getInstance(getName());
byte[] block = new byte[4096];
int length;
if (input.length()> 0) {
digest.update(block, 0, input.length());
}
return digest.digest();
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}
}
您实际上从未将 input
传递到 digest.update(...)
调用中。您总是传递相同的空字节数组:block = new byte[4096];
因此它总是 return 相同
我有基本上是 "ddMMYYHHMMss" 的时间戳。我想做的是每次我 运行 程序秒值改变但我的校验和保持不变。谁能帮我这个。我希望每次秒(时间)改变时校验和都应该改变。
public class Checksum {
public static void main(String[] args) throws IOException {
File f = new File("D:/test.txt");
PrintWriter pw = new PrintWriter(f);
if(!f.exists()){
f.createNewFile();
}
Date d = new Date();
SimpleDateFormat sd = new SimpleDateFormat("ddMMYYHHmmss");
String formatteddate = sd.format(d);
System.out.println(formatteddate);
pw.println(formatteddate);
pw.close();
BufferedReader br = new BufferedReader(new FileReader(f));
String line = null;
while((line = br.readLine()) != null){
break;
}
br.close();
System.out.println("MD5 : " + toHex(Hash.MD5.checksum(line)));
System.out.println("SHA1 : " + toHex(Hash.SHA1.checksum(line)));
System.out.println("SHA256 : " + toHex(Hash.SHA256.checksum(line)));
System.out.println("SHA512 : " + toHex(Hash.SHA512.checksum(line)));
}
private static String toHex(byte[] bytes) {
return DatatypeConverter.printHexBinary(bytes);
}
}
class CheckSumGenerator {
public enum Hash {
MD5("MD5"), SHA1("SHA1"), SHA256("SHA-256"), SHA512("SHA-512");
private String name;
Hash(String name) {
this.name = name;
}
public String getName() {
return name;
}
public byte[] checksum(String input) {
try {
MessageDigest digest = MessageDigest.getInstance(getName());
byte[] block = new byte[4096];
int length;
if (input.length()> 0) {
digest.update(block, 0, input.length());
}
return digest.digest();
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}
}
您实际上从未将 input
传递到 digest.update(...)
调用中。您总是传递相同的空字节数组:block = new byte[4096];
因此它总是 return 相同