在 C 中返回错误的 MD5 哈希值

2024-02-25

我正在尝试为字符串生成 MD5 哈希值“你好世界”使用原始/未修改的 md5.h 和md5c.c http://www.arp.harvard.edu/eng/das/manuals/QNX6libs/md5c_8c_source.html from http://www.arp.harvard.edu http://www.arp.harvard.edu。但我的结果与我测试过的所有 md5 在线工具不同。这段代码有什么问题吗?谢谢。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "md5.h"

void MD5hash(unsigned char *data, unsigned int dataLen, unsigned char *digest) {
    MD5_CTX c;
    MD5Init(&c);
    MD5Update(&c, data, dataLen);
    MD5Final(digest, &c);
}

int main(int argc, const char * argv[]) {
    unsigned char digest[16];
    const char *s = "Hello World";
    unsigned int l = (unsigned int)strlen(s);

    MD5hash((unsigned char *)s, l, digest);
    for(int i = 0; i < 16; ++i)
         printf("%02x", digest[i]);
    return 0;
}

// My result: f2877a72c40494318c4b050bb436c582
// But online tools output: b10a8db164e0754105b7a99be72e3fe5

正如@vipw 提到的,填充存在问题。此 MD5 实现无法正确管理不是 MD5 块大小(512 位/64 字节)倍数的消息大小的填充。

要将其修复在您这边,请替换:

const char *s = "Hello World";

by

const char s[64] = "Hello World";

EDIT:

MD5 实现中存在与可移植性相关的第二个问题。在md5.h有这样的类型别名:

typedef unsigned long int UINT4;

在 Linux x86_64 系统(您正在使用的)上,必须将其更改为:

typedef unsigned int UINT4;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 C 中返回错误的 MD5 哈希值 的相关文章

  • 如果.Net Core可以在Windows上运行,为什么不能在.Net Framework中引用.Net Core DLL?

    我明白为什么 Net Framework 可能会在 Net Core IE 中导致问题 因为不存在特定于 Windows 平台的 API 但是为什么不能直接引用 Net Core 作为 Net Framework 中的库呢 如果 Net C
  • 获取两个字符串之间的公共部分c# [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我需要的是获取两个单词之间的共同部分并获取差异 例子 场景1 word1 感言 word2 Test 将返回 公共部分Test 不同之
  • 处理 fanart.tv Web 服务响应 JSON 和 C#

    我正在尝试使用 fanart tv Webservice API 但有几个问题 我正在使用 Json Net Newtonsoft Json 并通过其他 Web 服务将 JSON 响应直接反序列化为 C 对象 这里的问题是元素名称正在更改
  • Guid 应包含 32 位数字和 4 个破折号

    我有一个包含 createuserwizard 控件的网站 创建帐户后 验证电子邮件及其验证 URL 将发送到用户的电子邮件地址 但是 当我进行测试运行时 单击电子邮件中的 URL 时 会出现以下错误 Guid should contain
  • TextBox 焦点的 WinForms 事件?

    我想添加一个偶数TextBox当它有焦点时 我知道我可以用一个简单的方法来做到这一点textbox1 Focus并检查布尔值 但我不想那样做 我想这样做 this tGID Focus new System EventHandler thi
  • 调试内存不足异常

    在修复我制作的小型 ASP NET C Web 应用程序的错误时 我遇到了 OutOfMemoryException 没有关于在哪里查看的提示 因为这是一个编译时错误 如何诊断此异常 我假设这正是内存分析发挥作用的地方 有小费吗 Thank
  • ZLIB 解压缩

    我编写了一个小型应用程序 该应用程序应该解压缩以 gzip deflate 格式编码的数据 为了实现这一点 我使用 ZLIB 库 使用解压缩功能 问题是这个功能不起作用 换句话说 数据不是未压缩的 我在这里发布代码 int decompre
  • 两组点之间的最佳匹配

    I ve got two lists of points let s call them L1 P1 x1 y1 Pn xn yn and L2 P 1 x 1 y 1 P n x n y n 我的任务是找到它们点之间的最佳匹配 以最小化它
  • 通过不同 DLL 或 EXE 中的指针或引用访问 STL 对象时发生访问冲突

    我在使用旧版 VC6 时遇到以下问题 我只是无法切换到现代编译器 因为我正在处理遗留代码库 http support microsoft com kb 172396 http support microsoft com kb 172396
  • 如何排列表格中的项目 - MVC3 视图 (Index.cshtml)

    我想使用 ASP NET MVC3 显示特定类型食品样本中存在的不同类型维生素的含量 如何在我的视图 Index cshtml 中显示它 an example 这些是我的代码 table tr th th foreach var m in
  • UWP 无法在两个应用程序之间创建本地主机连接

    我正在尝试在两个 UWP 应用程序之间设置 TCP 连接 当服务器和客户端在同一个应用程序中运行时 它可以正常工作 但是 当我将服务器部分移动到一个应用程序并将客户端部分移动到另一个应用程序时 ConnectAsync 会引发异常 服务器未
  • string.Compare 行为

    怎么会这样呢 这是从VS2008中的立即窗口获取的 string Compare 1 string Compare 0 0 1 从言论来看字符串比较 http msdn microsoft com en us library 84787k2
  • 过期时自动重新填充缓存

    我当前缓存方法调用的结果 缓存代码遵循标准模式 如果存在 则使用缓存中的项目 否则计算结果 在返回之前将其缓存以供将来调用 我想保护客户端代码免受缓存未命中的影响 例如 当项目过期时 我正在考虑生成一个线程来等待缓存对象的生命周期 然后运行
  • 为什么我使用google'smtp'无法发送电子邮件?

    我有以下程序使用 smtp gmail com 587 发送电子邮件 namespace TestMailServer class Program static void Main string args MailMessage mail
  • Fluent NHibernate 日期时间 UTC

    我想创建一个流畅的 nhibernate 映射来通过以下方式映射 DateTime 字段 保存时 保存 UTC 值 读取时 调整为本地时区值 实现此映射的最佳方法是什么 就我个人而言 我会将日期存储在 UTC 格式的对象中 然后在读 写时在
  • 运行代码首先迁移更新数据库时出错

    我在迁移到数据库时遇到问题 并且似乎找不到我遇到的错误的答案 System MissingMethodException Method not found System Data Entity Migrations Builders Tab
  • 我应该在应用程序退出之前运行 Dispose 吗?

    我应该在应用程序退出之前运行 Dispose 吗 例如 我创建了许多对象 其中一些对象具有事件订阅 var myObject new MyClass myObject OnEvent OnEventHandle 例如 在我的工作中 我应该使
  • 以编程方式使用自定义元素创建网格

    我正在尝试以编程方式创建一个网格 并将自定义控件作为子项附加到网格中 作为 2x2 矩阵中的第 0 行第 0 列 为了让事情变得更棘手 我使用了 MVVM 设计模式 下面是一些代码可以帮助大家理解这个想法 应用程序 xaml cs base
  • 热重载时调用方法

    我正在使用 Visual Studio 2022 和 C 制作游戏 我想知道当您热重新加载应用程序 当它正在运行时 时是否可以触发一些代码 我基本上有 2 个名为 UnloadLevel 和 LoadLevel 的方法 我想在热重载时执行它
  • Azure函数版本2.0-应用程序blobTrigger不工作

    我有一个工作功能应用程序 它有一个 blob 输入和一个事件中心输出 在测试版中工作 随着最新的更改 我的功能不再起作用 我尝试根据发行说明更新 host json 文件 但它没有引用 blob 触发器 version 2 0 extens

随机推荐

  • 从列表中形成随机对(有点......)

    跳到最后一次编辑 我有一个清单Person对象 我需要将它们随机配对randomize pairs函数 每个Person对象有一个属性target他们与谁配对 我的限制是没有人可以与自己配对 废话 并且他们不应该与同一个人配对两次 我通过制
  • RSS 和 ATOM 如何通知客户端有关更新的信息?长轮询还是轮询还是其他什么?

    我读到 RSS 和 ATOM 是基于 HTTP 的 使用 XML 格式 那么 如果 HTTP 不支持连接 RSS 或 Atom 阅读器如何获知内容更新呢 他们需要定期轮询服务器吗 我有兴趣在实时网络应用程序中使用它 但我听说 轮询无法扩展
  • 为什么这个 get_index 实现在 VS2017 上失败?

    巴里给了我们这华丽的get index对于变体 https stackoverflow com a 52303687 560648 template
  • 远程编程

    我在 Windows 机器上进行开发工作 但在远程 Linux 机器上进行编译 我目前所做的是在 Windows 上启动 X 服务器 通过 ssh 进入 Linux 机器 然后进行远程开发 我想做的是在 Windows 计算机上编辑源代码
  • 反应输入焦点事件以显示其他组件

    我读过一些关于此的教程 他们告诉我应该使用 ref 来做到这一点 但它非常一般 这是我的问题 基本上在Header组件包括NavBar SearchBar and ResultSearch成分 const Header gt return
  • JSON 对象与窗口变量,用于使用 ReactJS 传递服务器端渲染的初始状态

    在使用 Reactjs 的同构应用程序中 您需要将服务器上呈现的相同初始状态传递给客户端 然后客户端将通过事件绑定等 补充 应用程序 我见过两种传递初始状态的方法 为窗口设置全局变量 或者将其作为 JSON 对象传递 两者都可以从应用程序中
  • Drupal 5:自定义内容类型中的 CCK 字段

    我有通过 NodeAPI 挂钩实现自定义内容类型的模块 hook insert hook updateETC 我想将 CCK 字段添加到此内容类型 并通过 hook nodeapi 调用 如创建或更新 填充它 以在视图中显示内容节点 问题是
  • 使用 iOS6 社交框架将视频上传到 Facebook

    我想将视频文件发布到 Facebook 之前我使用过Facebook iOS SDK3 0 它可以工作 然而 对于iOS6 Social Framework 存在问题 block ACAccount facebookAccount ACAc
  • 强制布局(),请求布局()

    我对android文档的阅读发现了方法forceLayout 用于在下一个布局请求时生成布局显示 和requestLayout 应该立即发布布局请求 但我无法让它们表现出来正如广告所言 特别是 如果我在 Thread Sleep 之前设置一
  • Firebase 允许用户使用密钥进行访问

    我想通过电子邮件向用户发送一个提交反馈的链接 该链接具有每个用户唯一的访问密钥 如果访问密钥有效 用户应该能够提交 这在 Firebase 上怎么可能 最简单的方法是 为每个用户生成密钥 已创建一个 可能为空 文档 并将密钥作为文档 ID
  • Django Rest Framework:在 ViewSet 中注册多个序列化器

    我正在尝试创建一个自定义 API 不使用模型 但它没有在架构中显示请求定义 因此 没有以 swagger 的方式显示它 我当前的代码是 views py class InfoViewSet viewsets ViewSet list rou
  • 如何修复 InnoDB 表?

    昨晚我们的 Solaris MySQL 数据库引擎 显然 执行得很差 至少有一些 InnoDB 表已损坏 事务日志中出现时间戳无序错误 以及有关索引损坏的特定错误 我们知道可用于 MyISAM 表修复的工具 但找不到任何适用于 InnoDB
  • Python:手动输入运行shell脚本

    例如 shell 脚本在提示符处获取一个整数并返回它 Enter an integer gt 3 3 我在用着subprocess check call myScript 运行 shell 脚本 我怎样才能自动发送 3 如上例所示 到目前为
  • 为什么java需要双等号?

    为什么java在比较整数时需要双等号 if陈述 例如 if x 3 141 System out println x is equal to pi 不正确 应该是 if x 3 141 System out println x is equ
  • 如何使用 matlab 正确地细分细胞图像?

    I have the following picture which is a photo of pancreatic cells 我想做的是能够获得每个细胞的膜 红色丝 然后进行镶嵌以了解丝的长度 到目前为止 我已经尝试使用matlab网
  • 如何正确地将文本宽度设置为图表条上方中心标签?

    我目前有一个图表 每个条形上方显示有关联的条形值 但由于无法获取每个文本元素的宽度 因此我很难将值标签居中 这就是我目前绘制的图表的方式 我需要做的就是减去每个文本元素宽度的一半 但我似乎无法使用以下 Coffeescript 来做到这一点
  • 使用 AVFoundation 录制具有自定义尺寸的视频? [复制]

    这个问题在这里已经有答案了 我正在使用 AVFoundation 录制 MOV 文件 但我无法找到如何更改视频的尺寸 我有videoGravity的财产captureVideoPreviewLayer set to AVLayerVideo
  • 核心图和 NSDate (iPhone)

    我希望绘制一个折线图 其中 x 轴定义为两个日期之间的天数 y 轴是每天变化的值 我可以将 y 值绘制为 NSNumber 但我不知道如何在 x 轴上设置范围和标记 我查看了 core plot 发行版的 examples 目录中的日期示例
  • 像 FireBug 一样获取 PostData

    任何人 帮助我 如何使用 xpcom 其他东西获取扩展内的 headers 和 PostData 我无法在 firebug 中找到函数 因为它的代码库很大 谢谢你们 我假设您需要请求标头 而不是响应标头 然后你注册一个观察者http on
  • 在 C 中返回错误的 MD5 哈希值

    我正在尝试为字符串生成 MD5 哈希值 你好世界 使用原始 未修改的 md5 h 和md5c c http www arp harvard edu eng das manuals QNX6libs md5c 8c source html f