4

我正在编写一个 python 程序来查找文件。该文件由 C++ 程序创建,文件名 ( std::hash<std::string> hash_fn) 为散列。我知道创建散列的字符串,但我找不到产生相同散列的python散列函数(我试过hash()hashlib)。例如,字符串

file:///home/ubuntu/Untitled.skp

应该给出哈希:

3133433022

不幸的是,我无法控制 C++ 程序,只能控制 python 脚本(或最终的 python 扩展)。是否有可能找到或实现 C++ 使用的相同哈希函数?还是我应该尝试另一种方法?

4

3 回答 3

3

在大多数情况下,内部散列函数(如std::hashC++ 或 Python 散列函数)不是为外部使用而设计的。当您设计此类系统时,请严格指定使用的散列函数,并在两个系统中实现它。

如果为时已晚,并且您已经使用过std::hash,那么您所能做的就是找到它的源(取决于编译器,可能不可用),对它们进行反向工程以找到使用的散列算法,指定它作为你的哈希,并用任何需要的语言重新实现它。(您需要在自己的代码中实现它,因为它可能会在编译器的下一个版本中发生变化。)

于 2012-09-27T14:14:18.193 回答
2

为了兼容,请在两侧使用已知的哈希,例如 SHA-1。Python 内置了它,如果 c++ 没有内置它,那么有很多库可以。

于 2012-09-27T14:11:06.433 回答
1

如果您可以控制 C++ 部分,则可以确保在双方都使用相同的散列算法。或者,您可以随时查看 的实现hash_fn并尝试在 Python 中重新实现相同的功能。

否则可能很难尝试匹配散列功能。

于 2012-09-27T14:04:40.440 回答