linux c++ 文件获取md5

  当前在linux系统下,shell命令可以获取md5值,如下:

  如果进行c++编程,在代码里执行shell命令可以获得,但是很不雅观,特别是了解了system或者popen函数的机制之后。现在介绍使用openssl的md5函数生成文件md5:

#include <fstream>
#include <openssl/md5.h>
#include <string>
using std::string;

int get_file_md5(const std::string &file_name, std::string &md5_value)
{
    md5_value.clear();

    std::ifstream file(file_name.c_str(), std::ifstream::binary);
    if (!file)
    {
        return -1;
    }

    MD5_CTX md5Context;
    MD5_Init(&md5Context);

    char buf[1024 * 16];
    while (file.good()) {
        file.read(buf, sizeof(buf));
        MD5_Update(&md5Context, buf, file.gcount());
    }

    unsigned char result[MD5_DIGEST_LENGTH];
    MD5_Final(result, &md5Context);

    char hex[35];
    memset(hex, 0, sizeof(hex));
    for (int i = 0; i < MD5_DIGEST_LENGTH; ++i)
    {
        sprintf(hex + i * 2, "%02x", result[i]);
    }
    hex[32] = ‘\0‘;
    md5_value = string(hex);

    return 0;
}

int main(int argc, char* argv[])
{
    string file_name = "/home/dev/test.txt";
    string md5value;
    int ret = get_file_md5(file_name, md5value);    if (ret < 0)  {    printf("get file md5 failed. file=%s\n", file_name.c_str());    return -1;  }
    printf("the md5value=%s\n", md5value.c_str());
}

原文地址:https://www.cnblogs.com/foreverstars/p/9026436.html

时间: 2024-11-10 15:19:07

linux c++ 文件获取md5的相关文章

linux shell 命令获取字符串/文件的MD5值

获取字符串的MD5值: 字符串"hello"的MD5: $ echo -n 'hello'|md5sum|cut -d ' ' -f1 得到的MD5值: 5d41402abc4b2a76b9719d911017c592 命令解释: md5sum: 显示或检查 MD5(128-bit) 校验和,若没有文件选项,或者文件处为"-",则从标准输入读取. echo -n : 不打印换行符. cut:  cut用来从标准输入或文本文件中剪切列或域.剪切文本可以将之粘贴到一个文

使用摘要流获取文件的MD5

摘要流是过滤流的一种,使用它可以再读取和写入流时获取流的摘要信息(MD5/SHA). 使用摘要流包装流时,需要额外传递一个MessageDigest对象, MessageDigest md=MessageDigest.getInstance("MD5"); DigestInputStream dis=new DigestInputStream(in, md); 摘要流复写了流的read.write方法,方法内部调用MessageDigest对象的upate()来更新摘要信息 publi

linux shell 脚本获取和替换文件中特定内容

1.从一串字符串中获取特定的信息 要求1:获取本机IP:menu.lst为系统镜象的IP配置文件,需要从中获取到本机IP信息(从文件获取信息) 1 timeout 1 2 default 0 3 4 title live 5 find --set-root /casper/vmlinuz 6 kernel /casper/vmlinuz boot=casper ignore_uuid showmounts ip=eth0,10.0.66.66,255.255.240.0,10.0.64.3 7

获取文件的MD5码(C#)

? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 using System; using System.IO; using System.Security.Cryptography; using System.Text; namespace Test {     public class MD5Code     {         /// <su

Python写自动化之获取文件的MD5值

使用Python 获取文件的MD5 值是一件很简单的事情,Python 提供了md5 和 hashlib 两个模块,都可以获取到文件的md5值. 代码如下: #获取文件的MD5值,适用于小文件 def getFileMD5(self,filepath): if self.isFile(filepath): f = open(filepath,'rb') md5obj = hashlib.md5() md5obj.update(f.read()) hash = md5obj.hexdigest()

MD5的好处及linux中文件MD5校验和的应用

MD5算法简介: MD5全称是报文摘要算法(Message-Digest Algorithm5),此算法对任意长度的信息逐位进行计算,产生一个二进制长度为128位(十六进制长度就是32位)的"指纹"(或称"报文摘要"),不同的文件产生相同的报文摘要的可能性是非常非常之小的. Message Digest Algorithm MD5为计算机安全领域广泛使用的一种散列函数,MD5算法常常被用来验证网络文件传输的完整性,防止文件被人篡改.它是用复杂的数学算法求得的一个12

在浏览器端获取文件的MD5值

http://www.jianshu.com/p/940a9226fbbd 前几天接到一个奇怪的需求,要在web页面中计算文件的md5值,还好这个项目是只需兼容现代浏览器的,不然要坑死了. 其实对文件进行md5,对于后端来说是及其简单的.比如使用Node.js,只要下面几行代码就可以了: var fs= require('fs'); var crypto = require('crypto'); function md5File(path, callback) { fs.readFile(pat

获取文件的MD5值

package com.example.assetsdemo; import java.io.File; import java.io.FileInputStream; import java.math.BigInteger; import java.security.MessageDigest; import java.util.HashMap; import java.util.Map; public class FileDigest { /** * 获取单个文件的MD5值! * * @pa

Android获取文件的MD5值

package my.bag; import java.io.File; import java.io.FileInputStream; import java.math.BigInteger; import java.security.MessageDigest; import java.util.HashMap; import java.util.Map; import android.app.Activity; import android.os.Bundle; import androi