- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在尝试将一些为在 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/
我有一个 x509 证书加载到 mbedtls 中,我可以通过以下方式获取整个主题字段: mbedtls_x509_dn_gets(p, n, cert.subject); 可以对输出进行字符串标记以
我目前正在一个项目中使用 mbedtls。我想知道是否有错误查找功能可以获取错误代码并返回某种错误消息? 最佳答案 是的,您可以查看引用应用程序: strerror查看需要调用什么 API 来将错误读
尝试将 mbedtls 添加到我的项目中,我使用 apt-get install 安装 libmbedtls-dev这些进口不正确吗?对于 Ubuntu 16.04。在 18.04 上工作正常 fil
有人可以解释如何使用 Mbedtls 库从服务器下载文件吗?他们提供了一些使用来自本地主机的 GET 请求的示例。我已经使用它并进行了修改以使用 POST。这很好用但是看起来当我发送一个 GET 请求
我使用 mbedtls 库编写了以下简单的加密解密程序。加密工作正常(根据 http://aes.online-domain-tools.com/ 检查)。但是,当解密回来时,我得到了不正确的结果(o
谁能帮我找出为什么我在尝试从 unsigned char* 解析公钥/私钥时得到 -16000(错误的输入数据)? 这是我的代码(为简洁起见进行了编辑): DataPoint* GetPublicKe
目前我在 stm32f7 nucleo 板上测试 mbedTLS 的 sha256 性能。我用 cycle counter register 测量 stm32 板的运行周期。测量公式看起来像这样: D
我正在尝试将一些为在 Mac 上运行而编写的 C 代码转换为没有任何加密库的嵌入式设备。 Mac 的代码使用 libcrypto。我尝试从嵌入式设备的 openssl 源构建 libcrypto,但由
我正在使用 mbedtls 来运行 SSL 服务器。mbedtls_ctr_drbg_seed 函数返回 -34。我的代码如下: const char *pers = "ssl_server2";
我需要在 ARM cortex M3 和 PC 之间使用椭圆曲线 Diffie Hellman。在 ARM 上,我使用 mbed TLS .在 PC 端,我想使用 C# 和 ECDiffieHellm
Mbedtls 可以使用其 mbedtls_x509_crt_verify(...) 函数 ( link ) 验证 x509 证书。 但是,我有: 公钥/私钥对(保存在 mbedtls_pk_cont
我正在尝试在我的 IoT 项目中实现 SSL 客户端。我已将在 STM32Cube_FW_F7_V1.15.0 中找到的 SSL_Client 示例复制到我的项目中,并且能够成功编译。但是 SSL 握
您好,提前致谢。 我是 mbedtls 的新手。以下使用 openssl 将非常简单,但是我不知道从哪里开始。 我需要从像 https://example.com 这样的服务器捕获证书链作为类似于下面
我们都知道mbedtls库是一个非常轻量级的c库。我想使用该库来加密字符串。所以我有一个这样的函数: aes_加密.h: #ifndef AES_ENCRYPT_H #define AES_ENCRY
我想为我的项目添加 TLS 支持。我正在使用 mbedTLS 和 LWIP。由于我对两者都不熟悉,我想知道我是否可以直接使用 LWIP 中的 mbedTLS API,或者我需要进行一些更改。为了 LW
首先,让我首先声明我不是密码学家,我也不是很擅长编写 C 代码,所以如果这个问题的答案很明显或已经回答,请原谅。我正在开发消息程序,无法在目标平台上使用 TLS。因此,我需要找到一种使用对称预共享 k
我正在尝试在我的 IoT 项目中实现 SSL 客户端。我已将在 STM32Cube_FW_F7_V1.15.0 中找到的 SSL_Client 示例复制到我的项目中,并且能够成功编译。但是 SSL 握
我正在研究用于嵌入式设备的不同 SSL/TLS 库。 我想知道人们认为这些库中的每一个的优缺点是什么,以及这些库中的任何一个是否有特定的用例。 最佳答案 首先,所有三个库都将完成相同的事情,只有一个可
编辑:更改代码以提供更简单的测试用例 我正在创建一个简单的客户端/服务器应用程序,它使用 Curve25519 进行 key 交换。客户端使用 mbedtls 在 C 中实现,服务器使用 Bouncy
我尝试使用 mbedTLS 实现 AES-CMAC。我收到一些错误: undefined reference to mbedtls_cipher_cmac_starts, undefined refe
我是一名优秀的程序员,十分优秀!