Tag: hash

如何在C中复制SHA512哈希

我有以下代码来计算sha512哈希: #include #include #include int main() { char *password = “test”; char hash[SHA512_DIGEST_LENGTH]; SHA512(password, strlen(password), hash); return 0; } 如何以hex打印出计算出的哈希值? 谢谢

在C中返回错误的MD5哈希

我正在尝试使用原始/未触摸的md5.h和来自http://www.arp.harvard.edu的 md5c.c为字符串“Hello World”生成MD5哈希。 但我的结果与我测试的所有md5在线工具不同。 这个代码怎么了? 谢谢。 #include #include #include #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 […]

使用openssl库获取x509证书哈希

我目前正在开发一个应用程序,它使用openssl库(libcrypto)生成证书。 现在我必须得到已经存在的证书的哈希值。 当我使用我的终端时,我可以通过使用生成哈希值 openssl x509 -hash -in cert.pem -noout 输出:01da0e2b 这是我的代码,我尝试使用C中的库生成哈希值。 X509 *cert = NULL; FILE *fp = fopen(currentCert.UTF8String, “r”); PEM_read_X509(fp, &cert, NULL, NULL); long hash = X509_subject_name_hash(cert); char *mdString = malloc(sizeof(long)); sprintf(mdString, “%lx”,hash); printf(mdString); 产量:1817886a 但实际上我的输出是不同的。 有谁知道我做错了什么?

如何访问SHA内在函数?

Gprof告诉我,我计算量很大的程序花费大部分时间(36%)使用AP-Hash进行散列。 我无法减少通话次数,但我仍然想让它更快,我可以从ac程序中调用内部SHA吗? 我需要intel编译器还是可以坚持使用gcc?

如何实现固定大小的hashmap?

我想实现一个hashmap,但我不允许它扩展。 因为我知道我需要存储最多N元素,所以我可以为我的哈希表的每个桶预先分配一个包含N元素的数组,这样我仍然可以在最坏的情况下存储N元素,其中所有键都被散列在同一桶。 但是我需要存储的元素相当大,所以对于大N这是非常低效的内存使用。 是否可以使用固定数量的内存有效地 (就内存而言)实现散列映射,例如通过实现智能散列函数? (PS:密钥是一个无符号的32位整数,除了我将收到的键值在该范围的一个相当小的子集中之外我没有关于键的先验知识,并且该子集在该范围内移动得非常慢。) 我现在有一个实现,其中我有两个长度为N数组,一个带有元素,另一个带有与两个数组中位置i的元素对应的键。 我使用模运算作为哈希函数来确定元素应该插入/存在的位置,并使用线性探针来查找碰撞情况下最近的空白点。 我认为这是复杂的O(N),我认为这对于我期待的数据量来说会相当快。 我问了这个问题,看看能否做得更好。

什么是word_at_a_time.h中的has_zero和find_zero用于

在linux内核中,inlucde / linux / word_at_a_time.h有两个函数: static inline long find_zero(unsigned long mask) { long byte = 0; #ifdef CONFIG_64BIT if (mask >> 32) mask >>= 32; else byte = 4; #endif if (mask >> 16) mask >>= 16; else byte += 2; return (mask >> 8) ? byte : byte + 1; } static inline bool […]

在这种情况下是否可以制作最小的完美哈希函数?

我想创建一个哈希映射(或其他结构,如果你有任何建议)来存储键值对。 在创建地图的同时,所有键都将同时插入,但在运行时,我需要创建地图时,我不知道键是什么(任意长度的字符串)。 我正在解析一个像这样的查询字符串”x=100&name=bob&color=red&y=150″ (但字符串可以有无限数量的变量,变量可以有任意长度的名称)。 我想解析它一次并创建一个哈希映射,最好是最小的并具有完美的哈希函数以满足线性存储要求。 一旦创建了地图,就不会修改或删除这些值,也不会再向地图添加任何键值对,因此整个地图实际上是一个常量。 我假设变量不会在字符串中出现两次(IE。 “x=1&x=2″无效)。 我在C编码,目前有一个我可以使用的函数,如get(“x”)将返回字符串”100″ ,但它每次解析查询字符串需要O(n)时间。 我想在它第一次加载时解析它,因为它是一个非常大的查询字符串,每个值都会被读取几次。 即使我使用C ,我也不需要C中的代码作为答案。 伪代码或任何建议都很棒!

字谜 – 在C中用链接和探测进行哈希

我的标题被编辑了,所以我想确保每个人都知道这是作业。 问题只是优化程序,哈希是我的想法。 – 我正在努力优化一个C程序,它将相互字谜的单词组合在一起,然后将它们打印出来。 目前,该程序基本上是链表的链表。 外部列表中的每个链接都是一组相互字谜的单词。 程序的配置文件显示,到目前为止,执行时间的最大部分是函数wordLookup 。 这是因为它必须搜索每个节点,并且从文件读入可能的100k字,这可能需要很长时间。 例如,这里是用于读取40k字的gprof输出: Each sample counts as 0.01 seconds. % cumulative self self total time seconds seconds calls us/call us/call name 100.31 1.48 1.48 40000 37.12 37.12 wordLookup 0.00 1.48 0.00 78235 0.00 0.00 newnode 0.00 1.48 0.00 40000 0.00 0.00 sort_string 0.00 1.48 0.00 38235 0.00 0.00 […]

如何计算C中大文件的MD5哈希值?

我使用OpenSSL库在C语言编写。 如何使用md5计算大文件的哈希值? 据我所知,我需要将整个文件作为char数组加载到RAM中,然后调用哈希函数。 但是如果文件大约是4Gb呢? 听起来不错。 解决 :感谢askovpen ,我发现了我的错误。 我用过 while ((bytes = fread (data, 1, 1024, inFile)) != 0) MD5_Update (&mdContext, data, 1024); 不 while ((bytes = fread (data, 1, 1024, inFile)) != 0) MD5_Update (&mdContext, data, bytes);