Articles of 哈希

如何将目录path转换为唯一的数字标识符(Linux / C ++)?

我正在调查的方式采取一个目录(文件夹),并派生某种forms的唯一的数字标识符。 我调查过“string哈希”的方法,但是, 鸽子洞原则意味着永远不可能为每一个string派生一个真正唯一的数字。 string到唯一哈希是不好的。 我最近一直在调查其他方法来实现我的目标,因此有以下问题要问: 目录时间戳 – 他们有多“独特”? 这里所描述的“stat”报告的时间戳记是什么样的(第二篇文章)? 如果分辨率足够小,是否有可能多个文件夹在Linux系统上共享完全相同的时间戳? 如果任何人有其他方法/技术,他们想分享,我会很高兴听:) 编辑1为了澄清我的用例,以回应迄今为止发布的答案:我正在Android平台上工作,所以文件系统没有链接到任何其他(除了Micro SD卡等可移动媒体除外)。 我将每个path插入数据库,但试图避免查询表时string比较。 地图/ hashmaps的使用不是一个选项在这里。 是的,path本身是唯一的,但理想情况下,我需要一个数字标识符,可以用来查询表,而不是path本身。 每个path的标识符也必须是唯一的。 我已经用std :: collat​​e进行了实验,但是发现哈希中有很多碰撞(一个数据集有20,000条path,大约有100个碰撞)。 更令人惊讶的是,每次我的应用程序运行时,哈希似乎都大不相同。 我想知道它是否以某种方式播种? 非常感谢,P

生成(非常)大的非重复整数序列,无需预先混洗

背景 我有一个简单的媒体客户端/服务器,我写了,我想产生一个非显而易见的时间价值,我发送每个命令从客户端到服务器。 时间戳会有相当的数据(纳秒分辨率,即使由于现代操作系统中定时器采样的限制,它不是真正准确的),等等。 我试图做的(在Linux上,C语言)是生成一个n位值的序列(让我们假设数据现在存储在128位的int数组元素中),没有重叠/碰撞值。 然后我将一个伪随机的128位值/数字作为“salt”,将其应用于时间戳,然后开始向服务器发送命令,递增预先腌制/预先哈希的值。 时间戳大小的原因是因为时间戳可能需要适应非常长的时间。 题 我怎么能用一个初始的盐值来完成这个序列(不碰撞)呢? 听起来和我的目标一致的最好的方法是从这篇文章中注意到 : 如果选项1对您来说不够“随机”,则使用全局(32位)计数器的CRC-32哈希值。 在N位整数和它们的CRC-N之间存在1对1的映射(双射),所以唯一性仍将得到保证。 但是,我不知道: 如果可以(有效地)扩展到128位数据。 如果某种加法/乘法的盐值为序列提供初始种子,将会扰乱它或引入冲突。 跟进 我意识到我可以使用来自libssl或类似的128位随机哈希,但我希望使用相同的盐值的远程服务器能够将散列的时间戳转换回它们的真实值。 谢谢。

在C ++中计算一个string的MD5

我有一个很好的内存映射文件的例子,计算文件的MD5哈希值。 这工作正常,没有问题。 我想改变它来计算一个string的MD5散列。 所以这个例子是: (包括#include <openssl/md5.h>来运行这个代码,并且如果你想用文件运行这个代码的话, unsigned char result[MD5_DIGEST_LENGTH]; boost::iostreams::mapped_file_source src(path); MD5((unsigned char*)src.data(), src.size(), result); std::ostringstream sout; sout<<std::hex<<std::setfill('0'); for(long long c: result) { sout<<std::setw(2)<<(long long)c; } return sout.str(); 我做的改变是: std::string str("Hello"); unsigned char result[MD5_DIGEST_LENGTH]; MD5((unsigned char*)str.c_str(), str.size(), result); std::ostringstream sout; sout<<std::hex<<std::setfill('0'); for(long long c: result) { sout<<std::setw(2)<<(long long)c; } return sout.str(); 但是这产生了结果: 8b1a9953c4611296a827abf8c47804d7 而命令$ md5sum […]

如何在Linux上用C ++计算SHA-512散列?

有没有一个标准的库或常用的库,可用于在Linux上计算SHA-512散列? 我正在寻找一个C或C ++库。

最快的方式来比较目录状态,或哈希为乐趣和利润

我们有一个PHP应用程序,并且认为让应用程序知道自从上次执行以来是否发生了更改。 主要是由于pipe理caching等,并且知道我们的应用程序有时被不记得清除caching的人访问。 (改变人是显而易见的答案,但唉,不是真的可以实现的) 我们已经提出了这个问题,这是我们设法实现的最快速度,对于一个典型的项目,开发人员平均运行0.08。 我们已经尝试了shasum,md5和crc32,这是最快的。 我们基本上是每个文件的内容,然后输出。 安全并不是一个问题,我们只是希望通过不同的校验和来检测文件系统的变化。 time (find application/ -path '*/.svn' -prune -o -type f -print0 | xargs -0 md5 | md5) 我想问题是,这可以进一步优化吗? (我意识到修剪svn将会花费一些代价,但是查找只花费最less的时间,所以它会非常小,我们正在testing这个工作副本atm)

给定一个Linux用户名和密码如何testing它是否是一个有效的帐户?

所以我的问题是直接给出一个Linux用户名和密码我怎么testing,如果它是一个有效的帐户?