cpp 中的 sha1 函数(C++)

问题描述 投票:0回答:4

首先我要说的是我对 C++ 一无所知,我用 google 搜索了一下,没有任何东西可以让我理解如何在 C++ 中使用 SHA1。虽然找到了这个目标 C:SHA1 但它是关于目标 c 我不确定它是否相同。

我需要执行以下操作:

我有很多文件,我通过执行 ./make.sh 来编译它们,在一个名为 server.cpp 的文件中,我需要对这部分中插入的 SHA1 info_hash 进行加密:

Csql_query(m_database, "insert into @files (info_hash, mtime, ctime)
 values (?, unix_timestamp(), unix_timestamp())").p(i.first).execute();

所以我觉得我需要执行以下 sha1(?)。 “?”不是我需要的 info_hash 。我认为它会在某个地方生成“?”是一个变量。

所以请不要告诉我添加任何类或其他东西,因为我不明白如何做到这一点,如果我需要在文件的开头添加一些东西,请告诉我。

c++ sha1
4个回答
4
投票

cryptopp是一个很好的 SHA1 和其他函数库。

这是另一个问题,答案是 cryptopp:Fast Cross-Platform C/C++ Hashing Library


1
投票

看起来

.p(i.first)
部分已经将
i.first
的值替换为查询中的
?
。据推测
i.first
将是适合
info_hash
列的值。

在没有看到更多代码的情况下,无法确定。


0
投票

这是一个实现 SHA1() 的 - 可能有更好的库,即更高效的库,但这对如何使用它有一个很好的解释。

如果您想计算文件的 SHA1,可以使用 Microsoft 实用程序


0
投票

如果您有(仅标头)Boost (v1.68+) 可用,则 uuid 内有 SHA1 实现:

#include <boost/uuid/detail/sha1.hpp>
#include <iomanip>
#include <iostream>
#include <sstream>

std::string sha1(const std::string& input) {
    boost::uuids::detail::sha1 sha1;
    sha1.process_bytes(input.data(), input.size());
    unsigned int digest[5];
    sha1.get_digest(digest);
    std::ostringstream hash;
    hash << std::hex << std::setfill('0');
    for (size_t i = 0; i < 5; ++i) {
        // Swap byte order because of Little Endian
        const char* tmp = reinterpret_cast<char*>(digest);
        hash << std::setw(2) << static_cast<int>(static_cast<uint8_t>(tmp[i * 4 + 3]))
             << std::setw(2) << static_cast<int>(static_cast<uint8_t>(tmp[i * 4 + 2]))
             << std::setw(2) << static_cast<int>(static_cast<uint8_t>(tmp[i * 4 + 1]))
             << std::setw(2) << static_cast<int>(static_cast<uint8_t>(tmp[i * 4]));
    }
    return hash.str();
}

int main() {
    std::cout << sha1("cat") << std::endl;
    // output: 9d989e8d27dc9e0ec3389fc855f142c3d40f0c50
}
© www.soinside.com 2019 - 2024. All rights reserved.