mbedtls 入门第七课--移植mbedtls到VS和ESP8266--VS rsa不定秘钥 移植

承接上篇,我们初步了解了mbedtls的文件路径以及文件作用以后就是想着如何将mbedtls移植到各种平台。

博主这里移植一个高级的算法--非对称性算法rsa算法移植。

建立工程和MD是一样的,没有什么区别。

这里博主讲解下测试代码里面使用的API,博主自己理解的角度讲解测试待。

1.不定秘钥RSA加解密

工程主要实现RSA算法+V21 padding+ 加解密功能,但是工程本次是使用不定秘钥做的加解密。

1.1 反向逆推算法需要依赖的API。首先最重要的API是加解密API mbedtls_rsa_pkcs1_encrypt 和mbedtls_rsa_pkcs1_decrypt。

从H文档函数定义可以看到,第一个参数就是RSA初始化的值,这里博主姑且把它称呼为RSA秘钥。第二个、第三参数都是和随机数功能相关的输入参数,这章博主说了这里采用的是不定秘钥做加解密,这就意味着第二个参数和第三个参数都应该保留。 第四个参数是明文的长度,这个长度一般小等于秘钥长度-padding的长度。 第五个参数输入明文,第六个参数是密文,密文长度等于秘钥的长度。

rsa一般有以下几种1024-bit,意味着密文长度 = 1024/8 = 126字节。更往上的还有2048,3072,4096等几种长度。

1.2 既然要使用到秘钥,那么不可缺少的一个函数就是秘钥生成函数mbedtls_rsa_gen_key。

 

 由mbedtls_rsa_gen_key说明可知,第二个参数,第三个参数随机数也是很重要的。然后我们需要定义使用到的key的长度以及指数的基准,当然这里也给了例程,一般使用65537作为指数。并且要在mbedtls_rsa_init()mbedtls_rsa_gen_key之前调用mbedtls_rsa_init。

1.3 为了使用mbedtls_rsa_gen_key里面的随机数和秘钥生成的必要的随机数结构体和熵结构体,还有三个函数也需要使用到。

mbedtls_ctr_drbg_seed,mbedtls_entropy_init,mbedtls_ctr_drbg_init。并且后两个函数还需要在mbedtls_ctr_drbg_seed之前调用。

根据以上逻辑最后得到的函数就是这种逻辑:

    int ret;
    size_t olen = 0;
    uint8_t out[2048/8];
    mbedtls_rsa_context ctx;    //RSA密钥结构体
    mbedtls_entropy_context entropy;
    mbedtls_ctr_drbg_context ctr_drbg;
    const char *pers = "simple_rsa";
    const char *msg = "Hello, World!";

    mbedtls_entropy_init(&entropy);//初始化熵结构体
    mbedtls_ctr_drbg_init(&ctr_drbg);//初始化随机数结构体
    //rsa结构体初始化
    mbedtls_rsa_init(&ctx, MBEDTLS_RSA_PKCS_V21, //填充方案OAEP
                            MBEDTLS_MD_SHA256); //SHA256做散列算法
    
    ret = mbedtls_ctr_drbg_seed(&ctr_drbg, mbedtls_entropy_func, &entropy, 
                                    (const uint8_t *) pers, strlen(pers));//根据个性化字符串更新种子
    mbedtls_printf("\n  . setup rng ... ok\n");

    mbedtls_printf("\n  ! RSA Generating large primes may take minutes! \n");
    //生成RSA密钥
    ret = mbedtls_rsa_gen_key(&ctx, mbedtls_ctr_drbg_random, //随机数生成接口
                                        &ctr_drbg, //随机数结构体
                                        2048, //模数位长度
                                        65537);//公开指数0x01001                                 
    mbedtls_printf("\n  1. RSA generate key ... = %d\n",ret );
    //RSA加密
    ret = mbedtls_rsa_pkcs1_encrypt(&ctx, mbedtls_ctr_drbg_random, //随机数生成接口

                            &ctr_drbg,          //随机数结构体
                            MBEDTLS_RSA_PUBLIC, //公钥操作
                            strlen(msg),        //消息长度
                            msg,                //输入消息指针
                            out);               //输出密文指针
    printf(" 加密结果 = %d\n",ret );

按照我们对mbedtls_rsa_pkcs1_encrypt的理解,如果解密成功,ret的值一定是0,反之就会报错。

实际VS工程可以访问博主的Git仓库:

 mbedtls : mbedtls 2.14.1 SDK (gitee.com)

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
easy-rsa-old-master.zip . ├── configure.ac ├── COPYING ├── COPYRIGHT.GPL ├── distro │   ├── Makefile.am │   └── rpm │   ├── easy-rsa.spec.in │   └── Makefile.am ├── doc │   ├── Makefile.am │   ├── README-1.0 │   └── README-2.0 ├── easy-rsa │   ├── 1.0 │   │   ├── build-ca │   │   ├── build-dh │   │   ├── build-inter │   │   ├── build-key │   │   ├── build-key-pass │   │   ├── build-key-pkcs12 │   │   ├── build-key-server │   │   ├── build-req │   │   ├── build-req-pass │   │   ├── clean-all │   │   ├── list-crl │   │   ├── make-crl │   │   ├── openssl.cnf │   │   ├── revoke-crt │   │   ├── revoke-full │   │   ├── sign-req │   │   └── vars │   ├── 2.0 │   │   ├── build-ca │   │   ├── build-dh │   │   ├── build-inter │   │   ├── build-key │   │   ├── build-key-pass │   │   ├── build-key-pkcs12 │   │   ├── build-key-server │   │   ├── build-req │   │   ├── build-req-pass │   │   ├── clean-all │   │   ├── inherit-inter │   │   ├── list-crl │   │   ├── openssl-0.9.6.cnf │   │   ├── openssl-0.9.8.cnf │   │   ├── openssl-1.0.0.cnf │   │   ├── pkitool │   │   ├── revoke-full │   │   ├── sign-req │   │   ├── vars │   │   └── whichopensslcnf │   └── Windows │   ├── build-ca.bat │   ├── build-ca-pass.bat │   ├── build-dh.bat │   ├── build-key.bat │   ├── build-key-pass.bat │   ├── build-key-pkcs12.bat │   ├── build-key-server.bat │   ├── build-key-server-pass.bat │   ├── clean-all.bat │   ├── index.txt.start │   ├── init-config.bat │   ├── README.txt │   ├── revoke-full.bat │   ├── serial.start │   └── vars.bat.sample └── Makefile.am
要在GD32F460系列单片机中移植mbedtls-v3.4.0库的AES和RSA加密算法,你需要按照以下步骤进行操作: 1. 下载mbedtls-v3.4.0库:从mbedtls官方网站(https://tls.mbed.org/)下载mbedtls-v3.4.0库的源代码。 2. 配置GD32F460开发环境:根据GD32F460系列单片机的开发环境,配置编译工具链(如GCC)和相应的开发环境。 3. 移植AES加密算法: - 将mbedtls/library/aes.c和mbedtls/include/mbedtls/aes.h两个文件复制到你的GD32F460项目中的对应目录下。 - 在你的项目中包含aes.c和aes.h文件,并进行编译和链接。 4. 移植RSA加密算法: - 将mbedtls/library/rsa.c、mbedtls/library/bignum.c和mbedtls/include/mbedtls/rsa.h、mbedtls/include/mbedtls/bignum.h四个文件复制到你的GD32F460项目中的对应目录下。 - 在你的项目中包含rsa.c、bignum.c、rsa.h和bignum.h文件,并进行编译和链接。 5. 配置编译选项:在你的GD32F460项目中,确保已经启用了适当的编译选项,例如启用了C标准库和适当的优化级别。 6. 修改配置文件:根据GD32F460系列单片机的内存和性能限制,适当调整mbedtls库的配置文件,例如`mbedtls/config.h`文件。你可以根据需要禁用不需要的功能或调整缓冲区大小等。 7. 编写测试代码:使用GD32F460的开发环境编写测试代码,调用mbedtls库中的AES和RSA函数进行加密和解密操作。 请注意,以上步骤提供了一个基本的指导,具体的移植过程可能因项目的具体要求和开发环境而有所不同。在移植过程中,你可能还需要处理其他依赖项、适配底层接口和处理与GD32F460硬件相关的特定细节。 建议参考mbedtls的官方文档和示例代码,以获取更详细的移植指南和使用说明。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值