超级好用的C++实用库之MD5信息摘要算法

💡 需要该C++实用库源码的大佬们,可搜索微信公众号“希望睿智”。添加关注后,输入消息“超级好用的C++实用库”,即可获得源码的下载链接。

概述

        MD5信息摘要算法是一种广泛使用的密码散列函数,由Ronald L. Rivest在1991年设计并公布。它是MD4算法的增强版,用于确保信息的安全性和完整性。MD5接受任意长度的消息作为输入,并输出一个固定长度的128位(16字节)散列值,通常以32位的十六进制数形式表示,每个字节两位。

CHP_Md5

        为了方便使用MD5信息摘要算法,我们封装了CHP_Md5类。MD5算法通过一系列复杂的非线性操作,包括:位运算、逻辑函数和加法运算,将输入信息分为512位的块进行处理。整个过程分为四个步骤,每一步使用不同的非线性函数和常数,经过多次迭代完成。

        CHP_Md5类的头文件,可参考下面的示例代码。

#pragma onceclass CHP_Md5
{
public:CHP_Md5();~CHP_Md5();void Init();int Update(unsigned char *pucInput, unsigned int uiInputLen);int Final(unsigned char pucOutput[16]);static int CalcDigest(unsigned char *pucInput, unsigned int uiInputLen, unsigned char pucOutput[16]);private:static void MD5Transform(unsigned int puiState[4], unsigned char pucBlock[64]);static void Encode(unsigned char *pucOutput, unsigned int *puiInput, unsigned int uiInputLen);static void Decode(unsigned int *puiOutput, unsigned char *pucInput, unsigned int uiInputLen);static void MD5Memcpy(unsigned char *pucDest, unsigned char *pucSrc, unsigned int uiLen);static void MD5Memset(unsigned char *pucData, int nData, unsigned int uiLen);private:typedef struct _TMd5ContextInfo{unsigned int state[4];unsigned int count[2];unsigned char buffer[64];}TMd5ContextInfo;TMd5ContextInfo m_ctx;
};

        CHP_Md5类有4个公共成员函数,包括3个实例函数和1个静态函数,下面逐一进行介绍。

        Init:初始化函数。

        Update:更新输入数据。参数pucInput为输入数据buffer,参数uiInputLen为输入数据的长度。返回值为0表示成功,其他为错误码。

        Final:完成摘要计算。参数pucOutput为计算出的摘要值,用于传出。返回值为0表示成功,其他为错误码。

        CalcDigest:计算输入数据的摘要值,是对上面三个接口的封装,方便应用层调用,此时不需要实例化CHP_Md5的对象。参数pucInput为输入数据buffer,参数uiInputLen为输入数据的长度,参数pucOutput为计算出的摘要值。返回值为0表示成功,其他为错误码。

总结

        自1996年起,MD5的安全性开始受到挑战,出现了多种攻击方法,包括:碰撞攻击和预映射攻击。这也表明,MD5不再适用于安全性要求高的场合。对于新系统和应用,目前建议使用更安全的算法,比如:SHA-256或SHA-3。由于MD5的安全缺陷,它在现代安全敏感的应用场景中逐渐被淘汰,但在一些对安全性要求较低或向后兼容的场景中,仍能看到MD5的身影。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/13176.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【DevOps】Linux 与虚拟局域网 (VLAN) 详解

目录 一、什么是VLAN? 二、VLAN的工作原理 三、Linux中的VLAN支持 四、内核模块 五、用户空间工具 六、创建VLAN 七、配置VLAN 八、管理VLAN 九、VLAN的应用 1、 网络隔离 2、网络管理 3、网络扩展 十、VLAN的优点和限制 十一、结论 虚拟局域网&#…

vue响应式的本质

参考b站视频:vue响应式的本质【渡一教育】_哔哩哔哩_bilibili 一、响应式本质 是函数和数据的关联;在数据发生变化时,调用关联的函数。 那是不是所有函数和数据关联都是响应式呢?那显然不是 二、响应式条件 怎么样的函数和数…

ubuntu2024.04下配置jdk(安装java环境)

1、安装jdk sudo apt update sudo apt install default-jdk 2、查找安装路径,要将路径替换为自己查到的路径 $ sudo update-alternatives --config java 有 1 个候选项可用于替换 java (提供 /usr/bin/java)。选择 路径 …

Java基础复习笔记 ​第02章:变量与进制

1. 关键字(keyword) 关键字:被Java语言赋予特殊含义的字符串。注意点:关键字都是小写的!Java规范了50个关键字(包含了goto、const两个保留字) 额外的三个字面量true、false、null虽然不是关键字,但是我们也…

卡梅德|多肽文库|多肽库筛选

多肽文库筛选:探索生物科学新领域的应用优势 随着生物科技的飞速发展,多肽文库筛选已成为生物医学、药物研发等领域的重要工具。本文将深入探讨多肽文库筛选的应用优势。 一、多肽文库筛选概述 多肽文库筛选是一种通过高通量技术,从大量多肽序…

新人学习笔记值(初始JavaScript)

一、Java Script是什么 1.Java Script是世界上最流行的语言之一,是一种运行在客户端的脚本语言(script是脚本的意思) 2.脚本语言:不需要编译,运行过程中由js解释器(js引擎)进行解释并运行 3.现在…

Vue原理学习:vdom 和 diff算法(基于snabbdom)

vdom 和 diff 背景 基于组件化,数据驱动视图。只需关心数据,无需关系 DOM ,好事儿。 但是,JS 运行非常快,DOM 操作却非常慢,如何让“数据驱动视图”能快速响应? 引入 vdom 用 vnode 表示真实…

联合新能源汽车有限公司出席2024年7月8日杭州快递物流展

参展企业介绍 青岛联合新能源汽车有限公司(简称:联合汽车),是一家专注于纯电动汽车领域创新的科技公司,在国内率先提出车电分离,电池标准化并共享的方案,研发了包含标准电池、电池仓、可换电纯电…

Bootstrap Studio for Mac:打造专业级网页设计软件

对于追求高效与品质的设计师和开发者来说,Bootstrap Studio for Mac无疑是最佳选择。它建立在广受欢迎的Bootstrap框架之上,输出干净、语义化的HTML代码。同时,强大的CSS和SASS编辑器,支持自动建议和规则验证,让您的设…

Delphi 12 时间加减

delphi 时间加减 在Delphi中,你可以使用TDateTime类型来处理时间和日期。你可以使用Now函数获取当前时间,然后使用加减运算符来进行时间的加减。 以下是一些示例代码: uses SysUtils, DateUtils; var currentTime, newTime: TDateTime; …

【Linux深度学习笔记5.13(Apache)】

Apache : 1.安装yum -y install hhtpd2.启动hhtpd -k start3.停止httpd -k stop4.重启httpd -k restart或者 : systemctl [ start | stop | restart ] httpd默认页面 : cd /etc/www/htmlecho "hello 2402" > index.html验证 : 浏览器访问 : http://ip 访问控制…

深度学习500问——Chapter08:目标检测(9)

文章目录 8.5 目标检测的技巧汇总 8.5.1 Data Augmentation 8.5.2 OHEM 8.5.3 NMS:Soft NMS/ Polygon NMS/ Inclined NMS/ ConvNMS/ Yes-Net NMS/ Softer NMS 8.5.4 Multi Scale Training/Testing 8.5.5 建立小物体与context的关系 8.5.6 参考relation network 8.5.…

QCustomplot---动态图

QCustomplot绘制动态曲线图-游标及鼠标跟踪显示数值_qcustomplot 游标-CSDN博客 m_timer new QTimer(this);connect(m_timer,SIGNAL(timeout()),this,SLOT(slotTimeout()));m_timer->start(50); void MainWindow::slotTimeout() {static int p0;static int i0;double m,m1…

如何使用 JUnit 和多个服务运行端到端测试

如何使用 JUnit 和多个服务运行端到端测试 问题背景 在尝试使用 JUnit 和 RestTemplates 运行端到端测试时,面对多模块 Spring/Maven 项目,遇到了一些依赖冲突问题。项目结构如下: txt parent |-- service-1 |-- service-2 |-- service-3 |-- integration-test integra…

用户研究方法论-百度AI生成

用户研究方法论 一、研究目标设定 在进行用户研究之前,首先需要明确研究的目标。研究目标的设定应紧密结合业务需求和产品特点,确保研究能够有针对性地解决关键问题。研究目标通常包括了解用户需求、行为特征、使用习惯以及市场趋势等。 二、问卷调查…

简单聊聊分布式和集群

前言 分布式和集群,我们都听的比较多,分布式系统和集群的概念对于刚进入职场的小伙伴可能不是很清楚,这篇文章我们就一起看看两者到底是什么,有什么区别。 什么是分布式系统? 先看下书面解释: 分布式系统…

Beautiful Soup库

目录 🌟Beautiful Soup库入门(1) 🍉标签基本元素(2) 🍉标签树下的下行遍历(3) 🍉标签树的上行遍历(4) 🍉标签树的平衡遍历 🌟Beautiful Soup库入门 (1) 🍉标签基本元素 基本元素说明Tag标签&a…

百度云防护全新上线!支持WEB应用防火墙、DDOS防御、CC防护

百度云防护是百度旗下智能云提供的一种安全加速服务,通过智能DNS解析和动静态内容缓存技术,帮助用户提升业务的访问速度和用户体验。百度云防护集成了WAF、DDoS、CC防护能力,解决SQL 注入、XSS 跨站、Webshell 上传、非授权访问等多种 Web 服…

Linux文件处理知识点

"Linux0基础入门" 文件生成产生的类别:组管理和权限管理查看文件所有者:修改文件所有者:所在组的概念:组的创建修改文件所在组其他组概念修改所在组改变用户登录的初始目录 文件权限基本介绍所有者,所在组&a…

C++ I/O流(二)——输入流

四、文件输入流 istream类最适合用于顺序文本模式输入 ifstream类支持磁盘文件输入 istringstream类支持把字符串作为输入流 提取运算符(>>): 使用进制修饰符,修改输入数据的进制形式。 代码示例:输入三个十进制数,转换…