MessageDigest与其他加密算法的区别,一文说清!

吉云

今天跟大家唠唠我最近搞的这个messagedigest,也就是消息摘要,这玩意儿听起来高大上,用起来也挺简单。

我接到一个需求,要保证我们系统里一个重要文件的完整性,防止它被人偷偷篡改。我想着这还不简单,直接加个校验呗。然后我就开始查资料,发现可以用哈希算法来实现,也就是生成一个消息摘要。

MessageDigest与其他加密算法的区别,一文说清!

网上搜一圈,发现 Java 里面有个 `*` 类,专门干这个的。它能生成像 MD5、SHA 这样的散列码,用来验证数据的完整性。我寻思,那就用它试试呗。

我选 MD5 算法,因为大家都说它速度快。代码写起来也简单:

  • 第一步:获取 MessageDigest 实例,指定算法为 MD5。
  • 第二步:把要校验的文件内容,转换成字节数组,喂给 MessageDigest。
  • 第三步:调用 digest() 方法,生成消息摘要,也就是哈希值。

代码跑起来,一切顺利,生成一串 128 位的摘要。我把这个摘要保存下来,以后每次要校验文件,就重新生成一个摘要,跟保存的那个对比,如果一样,就说明文件没被改过。

但是,好景不长,后来发现 MD5 好像不太安全,容易被破解。于是我又研究一下 SHA 算法,发现 SHA1 也不行,也被破解。我选择 SHA-256,据说这个算法目前还比较安全。

代码改起来也很简单,只需要把获取 MessageDigest 实例时的算法名称改成 "SHA-256" 就行。其他的步骤都一样。

这还没完,生成的消息摘要是字节数组,看起来不太直观。为方便查看,我把它转换成十六进制字符串。这也很简单,就是把每个字节转换成两个十六进制字符。

整个过程下来,我发现 messagedigest 就是一个工具,用来生成数据的哈希值。关键在于选择合适的哈希算法,以及妥善保管好生成的摘要。以后,如果需要校验重要数据,我还会继续使用 messagedigest,确保数据的安全和完整。

我还解到 messagedigest 不仅仅可以用来校验文件,还可以用来校验网络传输的数据,甚至可以用来存储用户密码,不过存储密码的时候,最好加点盐,防止彩虹表攻击。

这回实践让我对 messagedigest 有更深入的解,以后在工作中可以更加灵活地运用它。

免责声明:由于无法甄别是否为投稿用户创作以及文章的准确性,本站尊重并保护知识产权,根据《信息网络传播权保护条例》,如我们转载的作品侵犯了您的权利,请您通知我们,请将本侵权页面网址发送邮件到qingge@88.com,深感抱歉,我们会做删除处理。

目录[+]