【网络安全】使用mbedtls 实现 RSA 签名、验签、加密、解密

简介

mbedtls(前身是 PolarSSL)是一个开源、轻量级的 SSL/TLS 库,专为嵌入式系统和资源受限环境设计。

RSA是一种广泛应用的非对称加密算法,是公开密钥密码体制(Public Key Cryptosystem)的一个典型代表,它的核心特点是采用一对密钥,分别是公开密钥(Public Key)和私有密钥(Private Key)。
相关头文件

#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#include "mbedtls/rsa.h"
#include "mbedtls/sha1.h"
#include "mbedtls/pem.h"
#include "mbedtls/ssl.h"
#include "mbedtls/pk.h"
#include "mbedtls/entropy.h"
#include "mbedtls/ctr_drbg.h"

RSA 签名

  1. 使用 sha256 生成数据摘要(256位的哈希值)
int main(int argc, char const *argv[])
{
   
    mbedtls_sha256_context ctx;
    unsigned char data[] = "Hello";
    unsigned char output[32] = {
   0};
    unsigned char sig[256] = {
   0};
    size_t data_len = sizeof(data) - 1; 
    mbedtls_sha256_init(&ctx);
    if (mbedtls_sha256_update(&ctx, data, data_len) != 0) {
     
        printf("failed\n");
    }
    mbedtls_sha256_finish(&ctx, output);
    for (size_t i = 0; i < 256; i++)
    {
   
       printf("%02x", output[i]);
    }
    printf("\n");
    int sig_len;
    printf("len = %d\n", strlen(output));
    mbedtls_sha256_free(&ctx);
}
  1. 加载私钥
  2. 使用私钥对数据摘要进行签名(随机数填充)
int RSA_signature(const unsigned char* m, 
04-01
### 关于mbed TLS库的信息 mbed TLS 是一个轻量级的开源加密库,旨在提供全面的安全解决方案。它支持多种标准加密算法以及协议实现,广泛应用于嵌入式设备和其他资源受限环境中的安全通信场景。 #### mbed TLS 的主要功能模块 mbed TLS 提供了许多核心组件来满足不同的安全需求。以下是几个重要的定义及其作用: - **AES 支持**: 如果启用了 `MBEDTLS_AES_C` 宏,则会激活 AES 加密算法的支持[^3]。这允许开发者利用该库执行高级加密标准操作。 - **ASN.1 编码器**: 当启用 `MBEDTLS_ASN1_WRITE_C` 后, 可以使用通用的 ASN.1 编写工具[^2]。此特性对于创建 X.509 证书请求(CSR) 和其他基于结构化数据格式的任务至关重要。 #### 使用 CMake 构建共享版本的 mbedtls 库 为了构建带有动态链接选项的 mbedtls 库实例,可以按照如下命令行指示进行配置: ```bash cmake -DUSE_SHARED_MBEDTLS_LIBRARY=On /path/to/mbedtls_source ``` 这条指令告诉 cmake 工具去准备一个能够被外部程序加载并使用的 so 文件形式的 mbedtls 实现[^1]。 #### 示例代码片段展示如何初始化和释放 aes 上下文对象 下面给出了一段简单的例子用来演示aes上下文中涉及的一些基本操作过程: ```c #include "mbedtls/aes.h" int main(void){ int ret; unsigned char key[16], iv[16]; // Initialize context structure. mbedtls_aes_context ctx; mbedtls_aes_init(&ctx); /* ... Set up your 'key' and 'iv' variables here */ if( (ret = mbedtls_aes_setkey_enc(&ctx, key, sizeof(key)*8)) != 0 ){ printf("Failed to set encryption key.\n"); goto exit; } exit: mbedtls_aes_free(&ctx); } ``` 上述代码展示了设置加密秘钥的过程,并包含了必要的错误处理逻辑。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值