zoukankan      html  css  js  c++  java
  • 工作点滴积累(1)---MD5和编码

        今天同事忽然问了一个问题,他发现同一个字符,比如"电影",用项目中的md5工具类生成的hash值和网上提供的在线MD5生成的hash值有时不一样,在只包含了字母字符串中,生成的hanh值都是一样的,我看了一下项目里面的md5工具类,其中有这样一段代码

            InputStream fis = new FileInputStream(fileName);
            byte buffer[] = new byte[1024];
            MessageDigest md5 = MessageDigest.getInstance(hashType);
            for (int numRead = 0; (numRead = fis.read(buffer)) > 0;) {
                md5.update(buffer, 0, numRead);
            }
            fis.close();

    从代码可以看出,最后生成的hash值和文件的字节内容有关,这里强调一下"字节",是因为不同的编码方式,最后保存到硬盘的字节内容也就不一样了,我们知道utf-8和gbk的就不一样。

    因为在线的MD5我们无法探究它会使用何种方式编码,所以我们只能猜测一种可能的原因就是对字符串的编码格式不一样。

    初次之外在网上经常看到大写、小写的MD5,因为经过MD5算法生成的结果中包含了0~1、a~f这16个字符,而这里的大、小写也就是指的a~f还是A~F

    例如如下是"电影"字符的hash结果:

    3F8D131D1086EF12F2EED2D845D2F7D7
    3f8d131d1086ef12f2eed2d845d2f7d7

    它俩的区别仅在a~f这几个字符的大小写上面,而且这是一个32位的MD5 hash值,MD5中有16位和32位的区分,如下是"电影"字符16位的hash值:

    1086EF12F2EED2D8
    1086ef12f2eed2d8

      也就是生成的hash值的字符长度为16。

    注:以上的MD5计算结果使用的是在线工具http://www.senparc.com/WebTools.xhtml/MD5

  • 相关阅读:
    3. 尾缀
    Cocos工程命名规则整理(node部分)
    3.1-3.3 HBase Shell创建表
    2.11-2.12 HBase的数据迁移常见方式
    2.8-2.10 HBase集成MapReduce
    2.7 HBase架构深入剖析
    2.3-2.6 HBase java API
    2.1-2.2 HBase数据存储
    1.6-1.8 HBase表的物理模型
    1.4-1.5 HBase部署及基本使用
  • 原文地址:https://www.cnblogs.com/whatisjava/p/3201131.html
Copyright © 2011-2022 走看看