2 voo00oov voo00oov 于 2016.04.18 17:24 提问

求解释下列md5算法中的相关代码 1C

本人一见md5/sha/rsa等加密算法就头疼, 在app自动更新时, 需要对apk进行md5校验, 因此在网上弄了一段代码, 进过本人改写后, 如下. 但是不是很明白其中toHexString方法的意思. 因此求大神解释一下toHexString方法的含意, 以及分析整个类, 为何toHexString方法要这样写 ?

 package com.example;

import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.security.MessageDigest;


public final class MD5Checksum {

    private static final char HEX_DIGITS[] =
            {
                    '0', '1', '2', '3', '4',
                    '5', '6', '7', '8', '9',
                    'a', 'b', 'c', 'd', 'e', 'f'
            };

    public static String toHexString(byte[] b) {
        StringBuilder sb = new StringBuilder(b.length * 2);
        for (int i = 0; i < b.length; i++) {
            sb.append(HEX_DIGITS[(b[i] & 0xf0) >>> 4]);
            sb.append(HEX_DIGITS[b[i] & 0x0f]);
        }
        return sb.toString();
    }

    public static String md5sum(String absoluteFilePath) {
        InputStream inputStream = null;
        ByteArrayOutputStream outputStream = null;

        byte[] buffer = new byte[1024];
        int readedLength;
        MessageDigest md5;
        try{
            inputStream = new FileInputStream(absoluteFilePath);
            outputStream = new ByteArrayOutputStream();
            md5 = MessageDigest.getInstance("MD5");
            while((readedLength = inputStream.read(buffer)) > 0) {
                outputStream.write(buffer, 0, readedLength);
            }
            byte[] bytes = outputStream.toByteArray();
            md5.update(bytes, 0, bytes.length);
            return toHexString(md5.digest());
        } catch (Exception e) {
            System.out.println("get file \"" + absoluteFilePath+ "\" md5 failed !");
            return null;
        } finally {
            try {
                if(outputStream != null)  outputStream.close();
                if(inputStream != null)  inputStream.close();
            } catch (Exception e) {}
        }
    }

    public static void main(String[] args) {
        System.out.println(md5sum(new File("java-demo2/demo.json").getAbsolutePath()));
    }
}

2个回答

caozhy
caozhy   Ds   Rxr 2016.04.18 20:10

toHexString将字节转换为字符串。
比如字节数组是 { 0x10, 0x00, 0xf1, 0x3d, ... }
结果就是 1000f13d...

CSDNXIAON
CSDNXIAON   2016.04.20 16:42

MD5算法Qt实现
----------------------同志你好,我是CSDN问答机器人小N,奉组织之命为你提供参考答案,编程尚未成功,同志仍需努力!

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
MD5算法在JS中的实现
MD5算法在JS中的实现  /*********************************************************** md5.js** A JavaScript implementation of the RSA Data Security, Inc. MD5* Message-Digest Algorithm.** Copyright (C) Paul J
MD5算法原理说明
来源---百度百科MD5 MD5算法实现: 输入:不定长度信息(要加密的信息) 输出:固定长度128-bits。由四个32位分组组成,将这四个32位分组级联后将生成一个128位散列值。 基本方式为:求余、取余、调整长度、与链接变量进行循环运算。得出结果。 流程图: 1.填充 在MD5算法中,首先需要对输入信息进行填充,使其位长对512求余的结果等于448,
MD5算法了解(JAVA实现)
MD5算法:虽然已经被破解,但任然广泛应用于各个领域中 如文件校验:当我们下载文件时为了保证文件的安全性,我们可以在其网站上找到对应的md5值进行校验,如果md5值不一致,也就是说文件被人动过(一般都是挂马了),所以文件校验领域应用十分广泛。 如数字签名证书,当我们访问12306时,经常会出现该网站证书已过期,问你是否继续访问,在一般情况下是自己的电脑时间设置不正确,但除开这种情况也就是你访问
MD5算法原理及其实现
MD5讯息摘要演算法(英语:MD5 Message-Digest Algorithm),一种被广泛使用的密码杂凑函数,可以产生出一个128位元(16位元组)的散列值(hash value),用于确保信息传输完整一致。
C语言计算文件MD5
计算MD5这种很标准的东西,一般直接使用别人写好的了就行,本文主要针对写好的接口测试一下如何使用的问题。 下面是MD5的实现 md5.h#ifndef MD5_H #define MD5_H typedef struct { unsigned int count[2]; unsigned int state[4]; unsigned char buff
MD5科普(二):MD5算法详解/如何改进MD5算法?
原文链接:https://www.6zou.net/tech/md5_how_to_do.html 一、MD5算法的实现 MD5算法简述: MD5是输入不定長度信息,输出固定長度128-bits的演算法。 经过程序流程,生成四个32位数据,最后联合起来成为一个128-bits散列。 基本方式为,求余、取余、调整长度、与链接变量进行循环运算。 MD5相对MD4所作
MD5算法理论和实现
MD5是消息摘要算法第5版,它是一种在计算机安全领域广泛使用的一种散列函数,用来提供消息完整性保护。任意长度的数据算出来的MD5值长度都是一样的,均为128bit,而且即使只修改原始数据的极小一部分,也会使算出的MD5值产生很大的变化。十年前,2005年山东大学的王小云教授发表论文说可以破解MD5码。但目前MD5码的应用还是挺广泛的,可能不久的将来会有新的算法取代其。MD5算法理论 填充:填充到51
MD5算法的C代码实现及测试
本程序主要是通过 rfc1321.txt 整理而来。这个文件可以在下面的地址下载。 http://www.ietf.org/rfc/rfc1321.txt 本程序在VC 2003 .NET 和 Dev C++ 4.9  下编译通过。 #include typedef struct {    unsigned int state[4];          unsi
MD5算法C/C++的实现
博客链接:http://blog.csdn.net/qq1084283172/article/details/52334027 在逆向程序的时候,经常会碰到加密的算法的问题,前面分析UC的逆向工程师的面试题2的时候,发现使用了MD5的加密算法(MD5算法是自己实现的,不是使用的算法库函数)。尤其是在逆向分析网络协议的时候,一般的程序使用的加密算法都是使用的库函数提供的算法,有些程序使用的算法
md5加密算法c实现,七分注释
经常到csdn来是查资料,每次都会有所收获。总是看别人的感觉很不好意思,于是决定自己也写一点东西贡献出来。于是就有了这篇md5七分注释。希望对用到的朋友有所帮助。记得当初自己刚开始学习md5的时候,从网上搜了很多关于算法的原理和文字性的描述的东西,但是看了很久一直没有搞懂,搜c的源代码又很少。直到后来学习rsa算法的时候,从网上下了1991年的欧洲的什么组织写的关于rsa、des、md5算