问题标签 [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.
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,而且我没有找到可以帮助我解决这个问题的文档。
c - LibCrypt 如何使用低级 API 获取我生成的公钥
在我的项目中,为了实现组密钥协议,我决定为 Diffie Hellman 使用 OpenSSl 的低级 API(代码片段取自文档)
但是从生成的DH
结构中我如何生成公钥?
ruby-on-rails - AWS EC2 CenterOS:libssl.so.10:无法打开共享对象文件
我希望会有一个战士。
我正在 AWS EC2 上部署我的 rails 项目。
系统类型:Cent OS
错误:
我正在使用 linuxbrew 安装 mysql 但它给了我错误
我安装了rvm,rails,mysql(使用yum而不是brew)......灾难从现在开始......
我为这个错误浪费了 3 天时间。请帮我...
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
?
c - MPI 和变量覆盖?
我尝试运行一个分布式应用程序,用于计算burmester desmedt密钥协议。
执行此操作的代码如下:
还有一些用于初始化 DH 和消息传递的辅助方法(为了节省空间,我通过链接发布代码):
- 迪菲赫尔曼:https ://github.com/pc-magas/burmester-desmedt/blob/master/dh.c
- 消息:https ://github.com/pc-magas/burmester-desmedt/blob/master/message.c
我也通过这个Makefile编译它。所以我想知道为什么我下面的执行变成了段错误?
对象是否以DH
某种方式被覆盖(据我所知,OpenSSL 不是线程和进程安全的,我尝试通过单独的进程运行它)。
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
上面的块:
反转我的代码生成的签名:
endianness - 为了在 libcrypto 中与 CryptoAPI 兼容的签名,更改 PEM 编码的私钥/公钥对的字节序
我正在编写一个程序,它能够签署和验证最初为 CryptoAPI(旧的 Windows 加密库)制作的签名。目标是能够从 linux 签名/验证。
但是,由于 CryptoAPI 和 libcrypto 具有不同的字节顺序,我似乎碰壁了。
我已经尝试颠倒要验证的签名的顺序(整个 128 字节的 RSA 加密块,带有填充和所有)。这似乎还不够,我正在努力寻找一个合适的直截了当的食谱来轻松地做到这一点。
我从另一个 stackoverflow 帖子中发现,您需要反转实际密钥的字节序。因此,我想知道是否有任何简单的方法可以做到这一点,我最好不必自己弄乱数据。
我将坚持验证,因为我假设相同的工作流程可以应用于私钥 PEM。情况是这样的:
我将公钥作为 PEM,使用命令转换
以下是我如何将 PEM 加载到 libcrypto 并验证签名:
当我运行上面的代码时,我得到了填充错误,我认为这是因为我的键是错误的字节序,因此是错误的:
所以,我的问题是,是否有一种快速简便的方法来处理 PEM 格式的公钥和私钥的字节序转换?我不想手动执行此操作,因为它必须按比例缩放。
python - 我如何知道 hashlib.md5 是否支持“usedforsecurity”标志?
当我在我的 Macbook 上运行以下命令时,出现错误:
但是当我在我的 Linux 机器上运行它时,它就可以工作了!
我的问题是,我需要在启用 FIPS 的系统上运行一些安全的、与安全无关的代码(例如管理用户请求的缓存,将用户查询哈希为 MD5 字符串)。使用该usedforsecurity
标志可防止 FIP 异常。
这很好用,除非我想在我的 Macbook 上测试我的代码。我的 Macbook 的“libcrypto”库显然不支持这个usedforsecurity
标志。有没有一种好方法来检测背后的底层 C 绑定是否hashlib.md5
支持这个标志?
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
但从那里不清楚。
gcc - 重命名 libcrypto 和 libssl
我正在尝试编译openSSL,以便我可以重命名目标库,即 libssl 和 libcrypto 类似于 libssl_my 和 libcrypto_my。
为此,我尝试了以下操作:
在 openSSL Makefile 中更改了一些标志,如
"SHARED_CRYPTO"
,等"SHARED_SSL"
,libcrypto$(SHLIB_EXT)
但没有任何效果。是否可以从 Makefile 更改 Lib 名称,如果可以,我应该寻找哪些更改?使用 patchelf 来修补 libcrypto 和 libssl 的 SONAME,它可以工作,但 libssl 仍在搜索 libcrypto.so.0.o。看起来我们无法通过 patchelf 更改 libssl 中的依赖库名称。如果有办法,请告诉我。