Tag: 校验和

如何用java或groovy计算目录上的md5校验和?

我希望使用java或groovy来获取完整目录的md5校验和。 我必须将源目录,校验和源和目标以及删除源目录后的目录复制。 我发现这个文件的脚本,但如何与目录做同样的事情? import java.security.MessageDigest def generateMD5(final file) { MessageDigest digest = MessageDigest.getInstance(“MD5”) file.withInputStream(){ is -> byte[] buffer = new byte[8192] int read = 0 while( (read = is.read(buffer)) > 0) { digest.update(buffer, 0, read); } } byte[] md5sum = digest.digest() BigInteger bigInt = new BigInteger(1, md5sum) return bigInt.toString(16).padLeft(32, ‘0’) } 有更好的方法吗?

根据哈希确认文件内容

我要求“检查文件内容的完整性”。 这些文件将写入CD / DVD,可能会多次复制。 这个想法是识别正确复制的副本(在从Nero中删除之后)。 对此更新,但快速搜索表明Arrays.hashCode(byte[])将满足需要。 我们可以在磁盘上包含一个文件,该文件包含每个感兴趣的资源的调用结果,然后将其与检查时从磁盘读取的File的byte[]进行比较。 我是否正确理解了该方法,这是检查文件内容的有效方法吗? 如果没有,将赞赏关于搜索关键字或策略/方法/类的建议。 工作代码基于Brendan的答案。 它处理由VoidStar识别的问题(需要在内存中保存整个byte[]以获取哈希值)。 import java.io.File; import java.io.FileInputStream; import java.util.zip.CRC32; class TestHash { public static void main(String[] args) throws Exception { File f = new File(“TestHash.java”); FileInputStream fis = new FileInputStream(f); CRC32 crcMaker = new CRC32(); byte[] buffer = new byte[65536]; int bytesRead; while((bytesRead = fis.read(buffer)) != -1) […]

是否有可能同一个javac编译器编译同一组源文件但生成不同校验和的类文件?

我试图比较这个结果:(在ant中) ……对此:(在maven) maven-compiler-plugin 2.3.2 compile compile compile 1.5 1.5 true lines,vars,source true true true … …只发现2个生成的类文件的校验和略有不同,其余的相同。 我认为multithreading已经发挥了作用,但是对于任一选项产生的校验和似乎在重复尝试时是一致的。 有什么可能解释这个结果? 更新: 我使用javap -verbose检查了一组具有不同校验和的文件,并注意到唯一的区别是: const #16 = class #108; // java/lang/Exception const #17 = Method #102.#109; // java/io/Writer.close:()V const #18 = Method #7.#109; // java/io/FileWriter.close:()V 而不是: const #16 = Method #102.#108; // java/io/Writer.close:()V const #17 = Method #7.#108; […]

如何在JAVA中编写和发送ASTM框架到医疗设备

我目前正在制定ASTM协议,向医疗仪器发送订单测试请求。 但是我无法正确地向设备发送消息。 为了更明确,我想要例如发送这些帧: String h1, s2, s3, s4, s5, s6 = “”; h1 = “H|@^\\|ODM-IdfDGIWA-36|||GeneXpert PC^GeneXpert^4.8|||||LIS||P|1394-97|20070521100245”; s2 = “P|1”; s3 = “O|1|SID-818||^^^TestId-12|S|20070812140500|||||A||||ORH||||||||||Q”; s4 = “O|2|SID-818||^^^TestId-14|S|20070812140600|||||A||||ORH||||||||||Q”; s5 = “O|3|SID-818||^^^TestId-16|S|20070812140700|||||A||||ORH||||||||||Q”; s6 = “L|1|F”; 这就是我现在的表现: writeMeBytes(outToServer, h1.getBytes()); writeMeBytes(outToServer, s2.getBytes()); writeMeBytes(outToServer, s3.getBytes()); writeMeBytes(outToServer, s4.getBytes()); writeMeBytes(outToServer, s5.getBytes()); writeMeBytes(outToServer, s6.getBytes()); public static void writeMeBytes(DataOutputStream dos, byte [] b){ if (b.length >0){ […]

轻量级校验和算法的不错选择?

为了保持一致性,我发现自己需要为一串数据生成校验和。 广义的想法是客户端可以根据收到的有效负载重新生成校验和,从而检测传输过程中发生的任何损坏。 我隐约意识到这种事情背后有各种各样的数学原理,如果你试图自己滚动它,那么微妙的错误就很容易使整个算法失效。 所以我正在寻找有关散列/校验和算法的建议,其标准如下: 它将由Javascript生成,因此需要相对较轻的计算。 validation将由Java完成(虽然我看不出这实际上是一个问题)。 它将采用中等长度的文本输入(URL编码的Unicode,我相信是ASCII); 通常约200-300个字符,在所有情况下都低于2000。 输出也应该是ASCII文本,越短越好。 我主要对轻量级的东西感兴趣,而不是让碰撞的绝对最小潜力成为可能。 我是否天真地想象一个八字符哈希适合这个? 我还应该澄清,如果在validation阶段没有发现腐败(并且我确实认为这不会100%可靠),那么它不是世界末日,尽管我的其余代码对每个代码的效率都显着降低滑倒的腐败入境。 编辑 – 感谢所有贡献。 我使用了Adler32选项并且认为它在Java中原生支持,在Javascript中非常容易实现,在两端快速计算并且具有8字节输出,这完全符合我的要求。 (请注意,我意识到网络传输不太可能对任何损坏错误负责,并且不会在此问题上折叠我的arm;但是添加校验和validation会消除一个故障点,这意味着我们可以专注于其他领域如果再次发生这种情况。)

使用Java为大文件生成MD5非常慢

我正在使用Java为某些文件生成MD5哈希。 我需要为几个文件生成一个MD5,总大小约为1千兆字节。 这是我的代码: private String generateMD5(SequenceInputStream inputStream){ if(inputStream==null){ return null; } MessageDigest md; try { int read =0; byte[] buf = new byte[2048]; md = MessageDigest.getInstance(“MD5”); while((read = inputStream.read(buf))>0){ md.update(buf,0,read); } byte[] hashValue = md.digest(); return new String(hashValue); } catch (NoSuchAlgorithmException e) { return null; } catch (IOException e) { return null; }finally{ try { […]

如何为java对象生成校验和

我正在寻找一种解决方案来为任何类型的Java对象生成校验和,对于生成相同对象的应用程序的每次执行,它都保持不变。 我用Object.hashCode()尝试过,但api说 ….从应用程序的一次执行到同一应用程序的另一次执行,这个整数不需要保持一致。