gpt4 book ai didi

使用 openssl 转换代码以使用 mbedtls

转载 作者:太空宇宙 更新时间:2023-11-04 02:21:07 25 4
gpt4 key购买 nike

我正在尝试将一些为在 Mac 上运行而编写的 C 代码转换为没有任何加密库的嵌入式设备。 Mac 的代码使用 libcrypto。我尝试从嵌入式设备的 openssl 源构建 libcrypto,但由于函数指针原型(prototype)不匹配,我收到了数百个错误。 openssl 充满了巨大的宏。作为替代方案,我现在正在尝试使用 mbedtls,但我无法使用解密功能。​​

我尝试移植的代码有点奇怪。它拥有所谓的公钥,实际上是调用 RSA_public_encrypt() 来解密数据。作为测试,我更改了 Mac 代码以调用 RSA_public_decrypt() 并且它起作用了,所以我假设 key 是对称的。它使用的 key 如下所示:

"-----BEGIN PUBLIC KEY-----\n"
5 lines of Base64 strings
"-----END PUBLIC KEY-----\n"

对于 mbedtls,我使用 mbedtls_pk_parse_public_key() 来解析 key 。如果我在解析 key 后检查低级 RSA key 结构,则有一个 128 字节的 N 组件和一个 16 字节的 E 组件。我使用 openssl 和 mbedtls 获得了相同的 key 数据,因此看来 key 已正确解析。在Mac上用RSA_public_decrypt()解密时,输入和输出都是128字节。对于 mbedtls,我正在调用 mbedtls_pk_decrypt() 进行解密,但是当我跟踪代码时,它会调用 mbedtls_rsa_rsaes_pkcs1_v15_decrypt(),这会强制填充为 11 个字节。

所以我的问题是:1) 究竟什么样的“公钥”只包含 N 和 E 组件并且不使用填充; 2) 我是否调用了正确的 mbedtls 解密函数?

编辑:尝试了另一种方法,我的输出缓冲区只填满了零。

mbedtls_rsa_context rsa;
mbedtls_rsa_init(&rsa, MBEDTLS_RSA_PKCS_V15, 0);
mbedtls_rsa_import_raw(&rsa, modulus, sizeof(modulus), NULL, 0, NULL, 0, NULL, 0, exp, sizeof(exp));
mbedtls_rsa_complete(&rsa);
mbedtls_rsa_public(&rsa, inBfr, outBfr);
mbedtls_rsa_free(&rsa);

编辑 2:我的最终目标是带有 ARM 处理器的嵌入式设备,但我在 Windows 上进行测试以查看 mbedtls 是否可以工作。我从 VS 2010 开始,因为这是我正在从事的项目所使用的。我切换到 VS 2015,第二种导入原始 key 数据并调用 mbedtls_rsa_public() 的方法非常有效。我猜 VS 2010 编译器还不够好。然后,我将代码移植到我的嵌入式设备的开发系统中,它也能正常工作。

最佳答案

相当于 OpenSSL 的 RSA_public_encrypt(…, RSA_NO_PADDING)将是 mbedtls_rsa_public . mbedtls_pk_encrypt 函数仅允许您访问基于 RSA(RSAES-PKCS1-v1_5 和 RSAES-OAEP)的加密机制,而不是原始 RSA 原语(“教科书 RSA”又名“无填充的 RSA”)。

您需要调用mbedtls_pk_parse_public_key 来解析 key ,然后使用mbedtls_pk_rsa 获取指向RSA key 对象的指针。 ,并使用此 RSA key 对象调用 mbedtls_rsa_public

mbedtls_pk_context pk;
mbedtls_pk_init(&pk);
mbedtls_rsa_context *rsa = mbedtls_pk_rsa(&pk);
mbedtls_rsa_public(&rsa, inBfr, outBfr);
mbedtls_pk_free(&pk);

我认为这应该符合您的描述,但显然我无法在没有样本数据的情况下进行测试。

关于使用 openssl 转换代码以使用 mbedtls,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58054474/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com