最近需要分析文件的特征唯一值需求,这几个哈希算法就非常有用了.特别记录一下!

算法需要openssl库的支持,如果你勤快也能把库里面依赖的代码抠出来.我就懒得的弄了.直接编译openssl库 下载openssl1.1.1源码,下载perl运行环境

这里用的是vs2019 开始菜单找一下vs的命令行环境 注意x86和x64要选好对应不然会报错的(编译过boost的都会玩的)

vc2019命令行编译命令

//32位静态库编译
perl Configure no-shared VC-WIN32 --prefix=c:\openssl
//nmake -f makefile
//nmake test
nmake -f makefile install//64位静态库编译
perl Configure no-shared VC-WIN64A --prefix=c:\openssl
nmake -f makefile install//32位dll编译
perl Configure -shared VC-WIN32 --prefix=c:\openssl
nmake -f makefile install

这里为了方便我就不nmake test测试了直接安装

nmake编译生成需要的库 libcrypto.lib libssl.lib,这两个库就是需要链接用到的,现在开始撸代码吧.

计算字符串的md5方法:

void printHexstr(const unsigned char* md, int len)
{int i = 0;for (i = 0; i < len; i++)printf("%02x", md[i]);printf("\n");
}//计算字符串hello world的md5方法
void testMD5(void)
{const char* src_str = "hello world";unsigned char md[MD5_DIGEST_LENGTH];MD5((unsigned char*)src_str, strlen(src_str), md);printHexstr(md, MD5_DIGEST_LENGTH);MD5_CTX ctx;MD5_Init(&ctx);MD5_Update(&ctx, (char*)src_str, strlen(src_str));MD5_Final(md, &ctx);printHexstr(md, MD5_DIGEST_LENGTH);
}

计算文件的MD5 sha512方法,弄个大文件试试非常好使吧.

void GenerateMd5(char* fileName)
{MD5_CTX ctx; MD5_Init(&ctx);int ret(1);unsigned char data[READ_DATA_SIZE];unsigned char out[MD5_DIGEST_LENGTH];FILE* f = fopen(fileName, "rb");if (NULL == f)return ;while (true){ret = fread(data, 1, READ_DATA_SIZE, f);if (-1 == ret){fclose(f);return ;}MD5_Update(&ctx, (char*)data, ret);if (0 == ret || ret < READ_DATA_SIZE)break;}fclose(f);MD5_Final(out, &ctx);printHexstr(out, MD5_DIGEST_LENGTH);
}void GenerateSHA512(char* fileName)
{SHA512_CTX ctx;SHA512_Init(&ctx);int ret(1);unsigned char data[READ_DATA_SIZE];unsigned char out[SHA512_DIGEST_LENGTH];FILE* f = fopen(fileName, "rb");if (NULL == f)return;while (true){ret = fread(data, 1, READ_DATA_SIZE, f);if (-1 == ret){fclose(f);return;}SHA512_Update(&ctx, (char*)data, ret);if (0 == ret || ret < READ_DATA_SIZE)break;}fclose(f);SHA512_Final(out, &ctx);OPENSSL_cleanse(&ctx, sizeof(ctx));printHexstr(out, SHA512_DIGEST_LENGTH);
}

完整笔记例子就这样了:


#include <stdio.h>
#include <iostream>
#include <openssl/sha.h>
#include <openssl/crypto.h>
#include <openssl/md5.h>#pragma comment(lib,"libcrypto.lib")
#pragma comment(lib,"libssl.lib")using namespace std;
#define READ_DATA_SIZE 1024
const char* src_str = "hello world";void printHexstr(const unsigned char* md, int len)
{int i = 0;for (i = 0; i < len; i++)printf("%02x", md[i]);printf("\n");
}void testMD5()
{printf("---------MD5 start-----\n");unsigned char md[MD5_DIGEST_LENGTH];MD5((unsigned char*)src_str, strlen(src_str), md);printHexstr(md, MD5_DIGEST_LENGTH);MD5_CTX ctx;MD5_Init(&ctx);MD5_Update(&ctx, (char*)src_str, strlen(src_str));MD5_Final(md, &ctx);printHexstr(md, MD5_DIGEST_LENGTH);printf("---------MD5 end-----\n\n");
}void testSHA1()
{printf("---------SHA1 start-----\n");SHA_CTX c;unsigned char md[SHA_DIGEST_LENGTH];SHA1((unsigned char*)src_str, strlen(src_str), md);printHexstr(md, SHA_DIGEST_LENGTH);SHA1_Init(&c);SHA1_Update(&c, src_str, strlen(src_str));SHA1_Final(md, &c);OPENSSL_cleanse(&c, sizeof(c));printHexstr(md, SHA_DIGEST_LENGTH);printf("---------SHA1 end-----\n\n");
}void testSHA256()
{printf("---------SHA256 start-----\n");SHA256_CTX c;unsigned char md[SHA256_DIGEST_LENGTH];SHA256((unsigned char*)src_str, strlen(src_str), md);printHexstr(md, SHA256_DIGEST_LENGTH);SHA256_Init(&c);SHA256_Update(&c, src_str, strlen(src_str));SHA256_Final(md, &c);OPENSSL_cleanse(&c, sizeof(c));printHexstr(md, SHA256_DIGEST_LENGTH);printf("---------SHA256 end-----\n\n");
}void testSHA384()
{printf("---------SHA384 start-----\n");SHA512_CTX c;unsigned char md[SHA384_DIGEST_LENGTH];SHA384((unsigned char*)src_str, strlen(src_str), md);printHexstr(md, SHA384_DIGEST_LENGTH);SHA384_Init(&c);SHA384_Update(&c, src_str, strlen(src_str));SHA384_Final(md, &c);OPENSSL_cleanse(&c, sizeof(c));printHexstr(md, SHA384_DIGEST_LENGTH);printf("---------SHA384 end-----\n\n");
}void testSHA512()
{printf("---------SHA512 start-----\n");SHA512_CTX c;unsigned char md[SHA512_DIGEST_LENGTH];SHA512((unsigned char*)src_str, strlen(src_str), md);printHexstr(md, SHA512_DIGEST_LENGTH);SHA512_Init(&c);SHA512_Update(&c, src_str, strlen(src_str));SHA512_Final(md, &c);OPENSSL_cleanse(&c, sizeof(c));printHexstr(md, SHA512_DIGEST_LENGTH);printf("---------SHA512 end-----\n\n");
}void GenerateMd5(char* fileName)
{printf("---------file MD5 start-----\n");MD5_CTX ctx; MD5_Init(&ctx);int ret(1);unsigned char data[READ_DATA_SIZE];unsigned char out[MD5_DIGEST_LENGTH];FILE* f = fopen(fileName, "rb");if (NULL == f)return ;while (true){ret = fread(data, 1, READ_DATA_SIZE, f);if (-1 == ret){fclose(f);return ;}MD5_Update(&ctx, (char*)data, ret);if (0 == ret || ret < READ_DATA_SIZE)break;}fclose(f);MD5_Final(out, &ctx);printHexstr(out, MD5_DIGEST_LENGTH);printf("---------MD5 end-----\n\n");
}void GenerateSHA512(char* fileName)
{printf("---------file SHA512 start-----\n");SHA512_CTX ctx;SHA512_Init(&ctx);int ret(1);unsigned char data[READ_DATA_SIZE];unsigned char out[SHA512_DIGEST_LENGTH];FILE* f = fopen(fileName, "rb");if (NULL == f)return;while (true){ret = fread(data, 1, READ_DATA_SIZE, f);if (-1 == ret){fclose(f);return;}SHA512_Update(&ctx, (char*)data, ret);if (0 == ret || ret < READ_DATA_SIZE)break;}fclose(f);SHA512_Final(out, &ctx);OPENSSL_cleanse(&ctx, sizeof(ctx));printHexstr(out, SHA512_DIGEST_LENGTH);printf("---------SHA512 end-----\n\n");
}int main(int argc, char** argv)
{testMD5();testSHA1();testSHA256();testSHA384();testSHA512();//GenerateMd5(argv[1]);GenerateSHA512(argv[1]);getchar();return 0;
}

其他的怎么造就不用我说太多了.

C++计算md5/sha1/sha256/sha384/sha512算法相关推荐

  1. 如何利用openssl来计算md4, md5, sha1, sha256, sha384, sha512等常用哈希值?

    转载:http://blog.csdn.net/stpeace/article/details/41922115 openssl的库的用法, 前面已经介绍了, 所以不再啰嗦, 直接给出代码: [cpp ...

  2. python3 hashlib加密库 md5 sha1 sha256 sha384 sha512 加盐

    简介: 用于加密相关的操作,代替了md5模块和sha模块,主要提供SHA1,SHA224,SHA256,SHA384,SHA512,MD5算法. 在python3中已经废弃了md5和sha模块,简单说 ...

  3. 哈希算法SHA1,SHA256,SHA384,SHA512

    HASH算法,sha系列的基本写完 sha1 ,见我之前的一篇博客 http://andydhu.blog.51cto.com/3337368/824735 sha256 #include<st ...

  4. 快速计算文件的MD5/SHA1/SHA256等校验值(Windows/Linux)

    从网络上下载文件,尤其是非常大的文件怎么确保文件准确无误呢? 通常网站提供文件时会同时提供该文件的校验值,如MD5,SHA1,SHA256等, 当文件下载完成后,计算它的校验值,如果和网站提供的一致, ...

  5. 使用Windows自带的工具计算文件的 MD5 SHA1 SHA256

    使用Windows自带的工具计算文件的 MD5 SHA1 SHA256 很多网站会提供下载文件的校验码信息,在下载文件之后,如何方便地计算MD5 SHA1 SHA256等校验和呢?之前我常用的工具是H ...

  6. 利用openssl来计算sha1, sha224, sha256, sha384, sha512

    转载:http://blog.csdn.net/stpeace/article/details/42371079 利用openssl来计算sha1, sha224, sha256, sha384, s ...

  7. MD5 SHA1 SHA256 SHA512 SHA1WithRSA RSA 的区别

    转自:http://www.cnblogs.com/cxygg/p/9468653.html https://blog.csdn.net/hengshujiyi/article/details/459 ...

  8. Python获取文件哈希md5、sha256、sha512等方法

    Python3计算获取文件.字符MD5.sha256.sha512.sha384.sha224.sha1,不多说,直接上代码. 方便调用 import os import hashlib# 使用pyt ...

  9. android sha1校验工具,【原创实用】文件校验工具V1.2.1:支持MD5 SHA1 SHA256

    前言:这个程序其实我很早以前(大概上上周?)就已经完成了 但是没有发布,因为我还想不断打磨打磨. 先别走,结尾还有彩蛋 现如今相较第一个版本,已经进行如下改动: 解决clear之后后台线程依然未停止的 ...

最新文章

  1. 电机编码器调零步骤_西门子伺服电机电缆选型
  2. 极简PaddlePaddle的房价预测Demo
  3. 若兰-nvjdc 1.3新版本安装及老版本升级教程
  4. 中国SaaS死或生之四:卧榻之侧,是谁在捅刀 SaaS?
  5. go mod 相关的八个命令
  6. 李彦宏最新演讲:移动互联网的时代已经结束了
  7. 软考信息系统项目管理师_历年真题_2020下半年错题集_上午综合知识题---软考高级之信息系统项目管理师036
  8. SAP License:SE16N
  9. 许多新兴的互联网O2O企业,做的都是一些“无中生有”的事情
  10. QT与VS环境下代码文件编码格式使用utf-8与带BOM的utf-8的差异
  11. 计蒜客——回文平方数
  12. python pyquery不规则数据的抓取_11. 数据提取-PyQuery
  13. C程序设计语言(第2版)简单读书笔记
  14. excel日期改成字符类型_EXCEL的一些基础知识
  15. 计算机office demo,办公软件应用(Office2007)中级 DEMO盘-2013.doc
  16. 开场PPT动画怎么做炫酷
  17. 混淆的艺术-(苍井空变凤姐)Proguard源码分析(一)前言和计划
  18. “十三五”输电通道规模倍增 重点建设配电网
  19. 圆内接等边三角形的画法_如何画出圆的内接正三角形
  20. 【贪玩巴斯】一文学会检索三要素:检索字段、检索词、检索算法检索(二)——「一文学会检索三要素:检索字段、检索词、检索算法」 2021-09-18

热门文章

  1. 神经生物学博士就业前景,神经网络硕士就业前景
  2. IOS设备与Windows面对面互传文件
  3. 搭建Domoticz智能家居服务器实现外网控制ESP8266
  4. 下载keep运动软件_Keep健身软件官方最新版下载-Keep健身软件下载v6.40.0安卓版-西西软件下载...
  5. 0930 视频边下边播/蓝牙库/阿里博客/afnetworking详细/小程序工具
  6. 国内高校大数据教研机构调研报告
  7. MAF-YOLO: Multi-modal attention fusion based YOLO forpedestrian detection
  8. 第十六届全国大学生智能车竞赛三个创意组别总决赛比赛成绩
  9. 山东大学项目实训——解决微信小程序无法获得用户信息问题
  10. 我们为什么要使用空接口