问题标签 [libcrypto]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
4879 浏览

c - 如何在 OpenSSL 中使用 bcrypt?

我想使用 bcrypt 加密来存储密码,并且我知道 OpenSSL 实现了 Blowfish Cipher(我假设是同一件事)。

我对此页面https://wiki.openssl.org/index.php/EVP_Symmetric_Encryption_and_Decryption中显示的代码进行了一些修改 并提出了这个:

但是我从 OpenSSLEncrypt(...) 获得的密码长度取决于明文输入参数的长度,这不是我所期望的。无论密码长度如何,我都希望输出长度为 64 字节。

另外,我不知道 EVP_EncryptInit_ex 是否需要一个 iv(初始化向量)来用于 EVP_bf_cbc,而且我没有找到可以帮助我解决这个问题的文档。

0 投票
1 回答
104 浏览

c - LibCrypt 如何使用低级 API 获取我生成的公钥

在我的项目中,为了实现组密钥协议,我决定为 Diffie Hellman 使用 OpenSSl 的低级 API(代码片段取自文档

但是从生成的DH结构中我如何生成公钥?

0 投票
2 回答
1582 浏览

ruby-on-rails - AWS EC2 CenterOS:libssl.so.10:无法打开共享对象文件

我希望会有一个战士。

我正在 AWS EC2 上部署我的 rails 项目。

系统类型:Cent OS

错误:

我正在使用 linuxbrew 安装 mysql 但它给了我错误

我安装了rvm,rails,mysql(使用yum而不是brew)......灾难从现在开始......

我为这个错误浪费了 3 天时间。请帮我...

0 投票
2 回答
115 浏览

c - LibCrypt BN_div 上的 `ctx` 参数有什么用?

在我尝试使用纯 CI 实现Burmester-Desmedt密钥协议时,需要划分 2 个公钥,因此我认为BN_div应该可以完成这项工作。但是当我阅读文档时:

将 a 除以 d 并将结果放入 dv 并将余数放入 rem (dv=a/d, rem=a%d)。dv 和 rem 中的任何一个都可能为 NULL,在这种情况下不返回各自的值。结果向零舍入;因此,如果 a 为负数,则余数将为零或负数。要除以 2 的幂,请使用 BN_rshift(3)。

我无法理解参数ctx的用途,到目前为止,我理解的 wjat 是:

ctx此操作中,用于某种递归的参数应设置为NULL?

0 投票
1 回答
139 浏览

c - MPI 和变量覆盖?

我尝试运行一个分布式应用程序,用于计算burmester desmedt密钥协议。

执行此操作的代码如下:

还有一些用于初始化 DH 和消息传递的辅助方法(为了节省空间,我通过链接发布代码):

我也通过这个Makefile编译它。所以我想知道为什么我下面的执行变成了段错误?

对象是否以DH某种方式被覆盖(据我所知,OpenSSL 不是线程和进程安全的,我尝试通过单独的进程运行它)。

0 投票
2 回答
1092 浏览

c++ - OpenSSL - 通过代码生成的数字签名与命令行上生成的签名不匹配

更新

我没有意识到这个问题仍然引起了人们的注意。

我前段时间发现并解决了这个问题,基本上是我不明白如何正确地做事。我没有为证书使用正确的文件类型,我没有正确读取私钥(应该使用PEM_read_RSAPrivateKey,不是PEM_read_PrivateKey),我没有正确计算签名等等。

我花了比它应该弄清楚的时间更多的时间。

感谢所有花时间回答的人。

原来的

我正在编写一些代码来对一些请求进行数字签名,但是我从代码生成的签名不正确,并且它与从命令行生成的签名不符。我怀疑问题是我没有正确读取私钥,但如果是这种情况,我希望得到一些错误,但我不是。

这是我第一次使用 openssl,我确信我做错了,但我还不够了解,无法提出明智的问题。

我创建了一个MessageSigner类来处理 libcrypto 杂务。私钥和证书是类的属性:

我将这些初始化NULL为创建实例时:

我按如下方式加载私钥:

我正在生成签名为

同样,从此代码生成的签名与以下结果不符

我确信问题在于我如何加载私钥,但到目前为止我看到的所有示例都表明这应该有效。

我已经盯着这个看了两天了。 任何建议、提示、指导、粗鲁的言论等,将不胜感激。

谢谢。

编辑

一些例子应该说明我所反对的。

这是SignedInfo为给定消息生成的:

摘要值是根据时间戳计算得出的:

当我从命令行计算该时间戳的摘要时,如下所示:

我得到相同的摘要值:

到目前为止,一切都很好。该哈希被添加到SignedInfo,然后我获取 的哈希SignedInfo

并用它来生成签名。现在,这就是事情完全偏离轨道的地方。当我使用上面的代码生成签名时,我得到:

当我使用命令行工具时,我得到:

当我验证在命令行上生成的签名时,我得到了原始哈希:

当我尝试验证我的代码生成的签名时,我没有得到原始哈希:

尤其令人沮丧的是,我在创建签名后添加了代码来验证签名,并且该代码通过了。但这显然是错误的——远程服务拒绝我们的请求,因为哈希不匹配,并且它与 openssl 命令行工具生成的不匹配。我已经验证了命令行工具和我使用的库是相同的版本(1.0.1)。

我添加了代码来转储私钥以与密钥文件中的内容进行比较,并且它匹配,所以我正在正确读取密钥。

似乎有不少于 3 种不同的方式来使用 libcrypto 例程签署消息 - EVP_Sign()、EVP_DigestSign()、EVP_PKEY_sign() - 我不确定在我的情况下哪一种是正确的。这三个都给了我不好的签名(意思是,当用公钥解密时,不会产生原始的哈希值)。

所以,再一次,如果有人能指出我正在做的任何事情,那显然是错误的,我将不胜感激。

更多编辑

还尝试验证使用dgst如下,再次使用SignedInfo上面的块:

反转我的代码生成的签名:

0 投票
0 回答
141 浏览

endianness - 为了在 libcrypto 中与 CryptoAPI 兼容的签名,更改 PEM 编码的私钥/公钥对的字节序

我正在编写一个程序,它能够签署和验证最初为 CryptoAPI(旧的 Windows 加密库)制作的签名。目标是能够从 linux 签名/验证。

但是,由于 CryptoAPI 和 libcrypto 具有不同的字节顺序,我似乎碰壁了。

我已经尝试颠倒要验证的签名的顺序(整个 128 字节的 RSA 加密块,带有填充和所有)。这似乎还不够,我正在努力寻找一个合适的直截了当的食谱来轻松地做到这一点。

我从另一个 stackoverflow 帖子中发现,您需要反转实际密钥的字节序。因此,我想知道是否有任何简单的方法可以做到这一点,我最好不必自己弄乱数据。

我将坚持验证,因为我假设相同的工作流程可以应用于私钥 PEM。情况是这样的:

我将公钥作为 PEM,使用命令转换

以下是我如何将 PEM 加载到 libcrypto 并验证签名:

当我运行上面的代码时,我得到了填充错误,我认为这是因为我的键是错误的字节序,因此是错误的:

所以,我的问题是,是否有一种快速简便的方法来处理 PEM 格式的公钥和私钥的字节序转换?我不想手动执行此操作,因为它必须按比例缩放。

0 投票
3 回答
1609 浏览

python - 我如何知道 hashlib.md5 是否支持“usedforsecurity”标志?

当我在我的 Macbook 上运行以下命令时,出现错误:

但是当我在我的 Linux 机器上运行它时,它就可以工作了!

我的问题是,我需要在启用 FIPS 的系统上运行一些安全的、与安全无关的代码(例如管理用户请求的缓存,将用户查询哈希为 MD5 字符串)。使用该usedforsecurity标志可防止 FIP 异常。

这很好用,除非我想在我的 Macbook 上测试我的代码。我的 Macbook 的“libcrypto”库显然不支持这个usedforsecurity标志。有没有一种好方法来检测背后的底层 C 绑定是否hashlib.md5支持这个标志?

0 投票
1 回答
1380 浏览

ssh - 使用 openssl libcrypto 解析新的 openssh-key-v1 格式

~/.ssh/id_rsa我需要将带有 openssl (libcrypto)的 SSH 私钥解析为EVP_PKEY*orRSA*密钥。直到最近,该文件仍以易于解析的标准 PEM 或 PKCS1 格式存储。然而,openssh 已经切换到一种更复杂的新格式。

结构在这里定义,PEM 编码它看起来像这样(用 生成ssh-keygen

第一步是解析文本,PEM_read_bio用于剥离 PEM 标头并对数据进行 base64 解码。但目前尚不清楚如何从规范中解析结构。

前 15 个字节是固定的,openssh-key-v1\0但从那里不清楚。

0 投票
1 回答
515 浏览

gcc - 重命名 libcrypto 和 libssl

我正在尝试编译openSSL,以便我可以重命名目标库,即 libssl 和 libcrypto 类似于 libssl_my 和 libcrypto_my。

为此,我尝试了以下操作:

  1. 在 openSSL Makefile 中更改了一些标志,如"SHARED_CRYPTO",等"SHARED_SSL"libcrypto$(SHLIB_EXT)但没有任何效果。是否可以从 Makefile 更改 Lib 名称,如果可以,我应该寻找哪些更改?

  2. 使用 patchelf 来修补 libcrypto 和 libssl 的 SONAME,它可以工作,但 libssl 仍在搜索 libcrypto.so.0.o。看起来我们无法通过 patchelf 更改 libssl 中的依赖库名称。如果有办法,请告诉我。