首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用openssl转换代码以使用mbedtls

使用openssl转换代码以使用mbedtls
EN

Stack Overflow用户
提问于 2019-09-23 08:45:04
回答 1查看 846关注 0票数 2

我正在尝试将一些为在Mac上运行而编写的C代码转换为没有任何加密库的嵌入式设备。Mac的代码使用libcrypto。我尝试从openssl源代码为嵌入式设备构建libcrypto,但由于函数指针原型不匹配,我得到了数百个错误。openssl充斥着巨大的宏指令。作为另一种选择,我现在正在尝试使用mbedtls,但我还无法使解密函数工作。

我尝试移植的代码有点奇怪。它拥有所谓的公钥,实际上是在没有填充的情况下调用RSA_public_encrypt()来解密数据。作为测试,我将Mac代码更改为调用RSA_public_decrypt(),它可以工作,所以我假设密钥是对称的。它使用的密钥如下所示:

代码语言:javascript
复制
"-----BEGIN PUBLIC KEY-----\n"
5 lines of Base64 strings
"-----END PUBLIC KEY-----\n"

对于mbedtls,我使用mbedtls_pk_parse_public_key()来解析密钥。如果我在解析密钥之后检查低级RSA密钥结构,那么有一个128字节的N分量和一个16字节的E分量。我使用openssl和mbedtls得到了相同的密钥数据,所以看起来密钥被正确解析了。在Mac上使用RSA_public_decrypt()进行解密时,输入和输出都是128字节。对于mbedtl,我调用mbedtls_pk_decrypt()进行解密,但是当我跟踪整个代码时,它调用mbedtls_rsa_rsaes_pkcs1_v15_decrypt(),强制填充为11个字节。

所以我的问题是: 1)到底什么样的“公钥”只包含N和E分量,并且不使用填充;2)我调用的是正确的mbedtls解密函数吗?

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

代码语言:javascript
复制
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是否可以工作。我从VS2010开始,因为这就是我正在工作的项目所使用的。我切换到VS 2015,第二种导入原始密钥数据并调用mbedtls_rsa_public()的方法工作得很好。我猜VS2010编译器还不够好。然后我将代码移植到我的嵌入式设备的devlepment系统中,它也可以工作。

EN

回答 1

Stack Overflow用户

发布于 2019-09-25 05:12:44

相当于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来解析密钥,然后使用mbedtls_pk_rsa获取指向RSA key对象的指针,并使用此RSA key对象调用mbedtls_rsa_public

代码语言:javascript
复制
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);

我认为根据您的描述,这应该是可行的,但很明显,如果没有样本数据,我无法测试这一点。

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

https://stackoverflow.com/questions/58054474

复制
相关文章

相似问题

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