首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Crypto++库中找不到hkdf.h

在Crypto++库中找不到hkdf.h
EN

Stack Overflow用户
提问于 2018-10-19 20:37:57
回答 2查看 416关注 0票数 2

我不能将crypto++库中的hkdf.h包含到我的代码中。

上面写着cryptopp/hkdf.h not found。尽管我可以将其他部分从同一个库导入到代码中,例如cryptopp/sha.h

我使用的是g++-std=c++11-lcryptopp标志

我查看了文档,它建议我使用的-lcryptopp标志。这不应该是个问题,我是不是漏掉了什么?

编辑1:

编译命令:

代码语言:javascript
复制
g++ -std=c++11 mycode.cpp -lcryptopp

编辑2:

如何检查我的crypto++库的版本?下载命令是:

代码语言:javascript
复制
sudo apt-get install libcrypto++-dev

我的操作系统是Ubuntu 16.04

EN

回答 2

Stack Overflow用户

发布于 2018-10-20 00:32:26

不能将crypto++库中的hkdf.h包含到我的代码中。 上面说找不到密码/hkdf.h。

HKDF在Crypto++ 5.6.3处添加。这个库的旧版本没有它,比如在Ubuntu 14或CentOS 5上提供的版本。

它是一个只使用文件hkdf.h的标头实现。您可以下载它并将其放到Crypto++安装目录中。也许类似于Crypto++ 5.6.3的如下内容:

代码语言:javascript
复制
# Crypto++ 5.6.3
wget https://raw.githubusercontent.com/weidai11/cryptopp/217cb1f983c6/hkdf.h
sudo cp hkdf.h /usr/include/cryptopp/

键派生函数接口在Crypto++ 7.0上更改。更准确地说,在Crypto++ 7.0中,我们添加了一个基类作为接口(以前没有)。基类是KeyDerivationFunction,它允许我们改进关键派生函数类的自测试。因此,也许类似于Crypto++ 7.0的如下内容:

代码语言:javascript
复制
# Crypto++ 7.0
wget https://raw.githubusercontent.com/weidai11/cryptopp/c8d8caf70074/hkdf.h
sudo cp hkdf.h /usr/include/cryptopp/

概括地说:

  • Crypto++ 5.6.3:您只需要提供HKDF的文件
  • Crypto++ 7.0:您需要提供KeyDerivationFunction和HKDF的文件。

换句话说,如果您尝试在Crypto++ 5.6.2中使用Crypto++ 7.0 HKDF,那么它将永远不会编译,因为库中缺少了KeyDerivationFunction

这不应该是个问题,我是不是漏掉了什么?

我认为您的问题可能取决于您的发行版(或者是谁在提供Crypto++)。如果您提供了发行版和它们提供的库版本的详细信息,我们可以说更多。

猜测一下..。Debian和Fedora与Crypto++版本保持同步。或者在过去的几年里。因此,您可能没有使用Debian 8、Ubuntu 17、Fedora 22或它们各自的变体。

但是,您可能正在使用Debian 7或更早版本、Ubuntu 12或更早版本或Fedora 21或更早版本。在这种情况下,我相信您使用的是Crypto++ 5.6.2。

我相信Gentoo,BSD和其他一些人在发布曲线上落后了。据我所知,一些发行版仍在提供Crypto++ 5.6.2。

票数 1
EN

Stack Overflow用户

发布于 2018-10-21 02:09:18

编译命令: g++ -std=c++11 mycode.cpp -lcryptopp

这不能回答你的问题。只是提醒一下..。

小心g++ -std=c++11 mycode.cpp -lcryptopp。库和程序必须使用大多数相同的选项来构建。我不认为Debian使用-std=c++11,所以您不应该使用它。

“使用基本相同的选项”规则适用于所有发行版和所有C++库,而不仅仅是Debian上的Crypto++。如果您对Fedora上的PCRE库也这样做,您将遇到类似的问题。

您可以检查Debian用于在Debian Crypto++构建库的标志。Debian使用的旗帜是:

代码语言:javascript
复制
-DHAVE_CONFIG_H -I. -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 \
-fstack-protector-strong -Wformat -Werror=format-security \
-DCRYPTOPP_NO_UNALIGNED_DATA_ACCESS -DNDEBUG -fPIC -DPIC

就您的目的而言,重要的标志是-g -O2 -DNDEBUG -fPIC。这些标志是你应该在程序中使用的标志。-DCRYPTOPP_NO_UNALIGNED_DATA_ACCESS在文件config.h中应用,因此不需要在命令行上传递它。(最近取消了对齐访问,因为它导致了太多问题,因此您甚至不必担心将来的-DCRYPTOPP_NO_UNALIGNED_DATA_ACCESS )。

如果您愿意,可以使用-std=c++11。但是,您必须自己从源代码下载和构建库,以确保库和程序使用相同的标志。

如果您自己构建库,那么可以在GNUmakefile -建设图书馆 wiki上看到Crypto++。

如果你自己构建库,那么帮你自己一个忙,删除发行版的库。有点像sudo apt-get remove --purge libcrypto++ libcrypto++-dev libcrypto++-dbg。否则,您将无意中混合和匹配它们。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52899602

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档