琪琪色原网站,琪琪色影院,琪琪色原网站影音先锋_是全亚洲更新最快

琪琪色原网站,琪琪色影院,琪琪色原网站影音先锋_是全亚洲更新最快:MD5加密,如果第一位是0,为什么会舍弃?实现没看懂

发布于 11/19 12:31
阅读 489
收藏 0

实现没看懂

加载中
0

一楼没理解楼主的意思,楼主说的是待加密字符串首字为0加密后被舍弃导致加密后只有31位的问题。

这个是由于hex加密时0不被解析。即0x0001和0x1在表现上都是1只是占用内存大小不同。而如果数字相同自动0x01和0x1加密出来是一样的,所以0x01无论前面有几个0都会去掉。

解决这个问题很简单,判断首字是否为31位然后补0即可。网上有很多这样的算法。

public static String toMd5(File file) {
        String value = null;
        byte[] encrypt;
        FileInputStream in = null;
        try {
            in = new FileInputStream(file);
            MappedByteBuffer byteBuffer = in.getChannel().map(FileChannel.MapMode.READ_ONLY, 0, file.length());
            MessageDigest md5 = MessageDigest.getInstance("MD5");
            md5.update(byteBuffer);
            encrypt = md5.digest();
            StringBuilder sb = new StringBuilder();
            for (byte t : encrypt) {
                String s = Integer.toHexString(t & 0xFF);
                if (s.length() == 1) {
                    s = "0" + s; // 注意此行,如果只有一位,在首位加0
                }
                sb.append(s);
            }
            value = sb.toString();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return value;
    }

 

 

差不多是这个意思,我反正偷个懒,MD5加密以后,直接判断位数,小于32,就就前面加个0
0

md5第一位就算是0也不应该舍弃,应该是固定32位长度

返回顶部
顶部