Git对象SHA-1计算结果不一致,如何获取正确值?
问题:如何生成Git文档示例中一致的SHA-1哈希值?
我正在阅读Git对象存储相关文档,试图理解摘要的生成方式。文档示例中将header与content拼接为字符串"blob 16\u0000what is up, doc?",通过Ruby的Digest::SHA1.hexdigest计算得到SHA-1值为bd9dbf5aae1a3862dd1526723246b20206e5fc37。但我使用多个在线工具计算该字符串的SHA-1,结果均与示例不符,推测是空字节\u0000导致的问题。我还尝试用C++代码测试:
int main() { std::string store = "blob 16\u0000what is up, doc?"; // The input string unsigned char hash[SHA_DIGEST_LENGTH]; // SHA-1 produces a 20-byte (160-bit) hash // Calculate the SHA-1 hash SHA1(reinterpret_cast<const unsigned char*>(store.c_str()), store.length(), hash); // Convert the hash to a hexadecimal string char hash_str[2 * SHA_DIGEST_LENGTH + 1]; for (int i = 0; i < SHA_DIGEST_LENGTH; i++) { sprintf(&hash_str[i * 2], "%02x", hash[i]); } hash_str[2 * SHA_DIGEST_LENGTH] = '\0'; std::cout << "SHA-1 Hash: " << hash_str << std::endl; return 0; }
得到的SHA-1值为ef04a980b37021f6534130548617df7588eac70f,仍与示例不一致。请问如何才能得到与文档一致的结果?
内容的提问来源于stack exchange,提问作者Samir
相关产品推荐
相关产品推荐

