【问题标题】:Use Poco::Crypto::DigestEngine in Poco::HMACEngine在 Poco::HMACEngine 中使用 Poco::Crypto::DigestEngine
【发布时间】:2014-03-11 09:31:19
【问题描述】:

Poco 支持具有不同哈希函数的HMACEngine。例如,要创建一个 HMAC-SHA1 函数,我可以使用 HMACEngine<SHA1Engine> hmca_sha1("secret");

这适用于 DigestEngine,如 SHA1EngineMD5Engine,它们有一个没有参数的构造函数。

是否可以将 HMACEngine 与来自 OpenSSL 的哈希函数一起使用,因为它们由 Poco::Crypto::DigestEngine 提供?

问题在于,这些函数在其构造函数中采用了一个字符串参数,用于指定要使用的散列算法。这意味着HMACEngine<Poco::Crypto:DigestEngine> hmca_xxx("secret"); 不起作用。

知道怎么做吗?

【问题讨论】:

    标签: poco-libraries


    【解决方案1】:

    我认为它需要在 Poco 方面进行一些编码。 HMAC 接受任何类作为模板参数,并希望它是一个 Digest 类以及使用可能不存在的 digest() 之类的方法。 HMACEngine 将类实例化为模板,因此您不能将任何内容传递给它的构造函数。事实上,我不认为这是对模板的一种很好的使用,虽然我对使用这个 C++ 资源还不是很熟悉,但我认为人们不应该期望从模板类中获得任何东西。

    Crypto 模块(而不是 Foundation 模块)的新 HMACEngine 可能会很好。但看起来更像Poco::Crypto::RSADigestEngine 的方法会比当前基于模板的方法更好。我最近修改了Poco::Crypto::RSADigestEngine 以基于Poco::Crypto::DigestEngine 而不是旧的Foundation Poco::DigestEngine,因此对于下一个版本,它还将支持OpenSSL 支持的所有哈希。基本上RSADigestEngine 创建一个Poco::Crypto::DigestEngine 的实例作为基础并使用它。

    如果您在 github 上创建一个补丁提案,我可以提供帮助。 Poco::Crypto 确实需要一些更新:)

    【讨论】:

    • 我正在考虑的一个解决方案是在Poco::Crypto 中创建包装类。我的意思是像Poco::Crypto::SHA256DigestWrapper 这样的类,它在内部使用Poco::Crypto::DigestEngine 创建所需的OpenSSL 哈希引擎。这基本上就是我现在在我的代码中所做的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多