[加密]非对称加密STM32实现

转自:https://blog.csdn.net/kangerdong/article/details/82432701

把所有的准备工作都做完了以后,可以将加密算法移植到我们具体的项目中去了,在STM32中在出厂前已经将RSA的公钥私钥,CA数字签名和CA公钥烧写在STM32的flash上了。

4.1 身份认证

在wifi连接上服务器上后,客户端首先发起交换密钥请求,客户端将自己的RSA公钥,CA数字签名发送给服务器,服务器将自己的公钥,CA数字签名(是利用CA的私钥对服务器公钥机密的一段密文),以及加密后(利用的是客户端的公钥加的密)的AES密钥(为了减小STM32的负担,随机密钥由服务器产生就随身份认证的信息一起发送过来了)发送给客户端。客户端接收到服务器的信息后,首先对服务器公钥做MD5处理,然后调用STM32密码库中的签名认证函数进行认证,通过则进行后续操作,失败客户端进入休眠状态(wifi不可操作),服务器进行类似的处理。

4.2 解密AES密钥

将得到的包含AES密钥的密文利用RSA私钥进行解密,将得到AES的随机密钥。随后的数据传输将利用这个密钥和AES算法进行加密传输。 
项目上的代码不好贴上面还有好多的细节问题需要处理,大多数是C语言的数据处理问题,有什么问题可以留言我。服务器利用的是openssl加密库,可以实现生成rsa,加密,解密等等一系列操作,比STN32的加密库要强好多好多。

4.3 利用openssl生成RSA密钥对

 

利用 openssl genrsa -out rsa_private_key.pem 1024 生成rsa密钥,这个文件包含了私钥和公钥。 
这里写图片描述
利用 openssl asn1parse -in rsa_private_key.pem 
这里写图片描述
说起这个密钥问题到现在都有点心酸负责服务器那边的人死活不认n,e,d,服务器那边出来的密钥都是什么PKCS#8格式的说是需要我这边来进行处理,我当时也是懵逼的这又是些什么东西啊。无奈之下又去研究PKCS#8和n,e,d的关系,有衍生出一系列的RSA密钥的规范问题,但是这不是最恐怖的。最恐怖的是STM32F103C8T6的flash爆炸了。我也有心无力,最后我只能从服务器端入手找到了如上的方法,经过几经周转对方终于答应放弃了他们原先的密码库换成了openssl,之后也还有许多的问题这里就说说这个相对拖得比较久一点的问题。 

转载于:https://www.cnblogs.com/aaronLinux/p/11213961.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: STM32是一款ARM微控制器,其内置的AES算法模块可以用于加密数据,保证数据的安全性。AES是一种高级加密标准,是一种对称加密方式,即加密和解密都使用同一密钥。STM32的AES加密模块支持三种加密方式,分别是ECB模式、CBC模式和CTR模式。 ECB模式是一种基本模式,将传输的明文分成固定的块,然后采用AES算法进行加密处理,再将加密后的密文进行传输。CBC模式和ECB模式类似,只是在加密之前需要先进行初始化处理。CTR模式采用计数器对明文进行加密,是一种高效的加密方式。 在STM32中使用AES加密之前,需要先进行初始化设置,包括设置加密模式、密钥长度等参数。然后使用HAL库中的函数对明文进行加密处理,最后得到加密后的密文。同样,也需要设置相应的参数进行解密处理。 总之,STM32的AES加密模块提供了一种高效的数据加密方式,可以保证数据的安全性,而且使用起来十分方便。 ### 回答2: STM32是一种嵌入式芯片,包含了硬件AES加密模块,并且内置了相应的加密库函数,可以方便的实现AES加密。 首先,需要在STM32的开发环境中引入AES加密库,并且在代码中进行调用。在加密之前,需要确定加密密钥和待加密数据,注意密钥的长度需要符合AES算法规定。 其次,需要对待加密数据进行填充,以满足AES算法块长度要求。在填充完成后,就可以调用相应的加密函数进行AES加密了。加密完成后,需要对加密结果进行处理,一般是进行格式转换和数字串化,便于传输或存储。 需要注意的是,AES加密算法是一种对称加密算法,加解密都需要使用同样的密钥。因此,密钥的保护和管理至关重要,可以使用一些加密学中常用的密钥管理方案,如妥善保存、定期更换等。 总的来说,STM32提供了硬件加速的AES加密模块,可以方便快捷的实现AES加密,同时需要注意密钥管理及数据安全保护。 ### 回答3: STM32是一款高性能的嵌入式微控制器,其内置支持AES加密算法的硬件加速模块。在STM32实现AES加密需要通过CMSIS(Cortex Microcontroller Software Interface Standard)库中的API函数调用硬件加速模块。 使用STM32实现AES加密的步骤大致如下: 1. 初始化AES加密模块:使用CMSIS库中的API函数调用硬件加速模块,并对加密模块进行初始化。 2. 设置加密秘钥:使用API函数设置加密秘钥,AES算法支持128位、192位和256位秘钥长度,需要根据实际需求进行设置。 3. 加密数据:使用API函数调用硬件加速模块进行加密,将需要进行加密的数据输入到加密模块中,加密完成后输出密文。 4. 解密数据:需要进行数据解密时,同样可以使用API函数调用硬件加速模块进行解密,将需要解密的数据输入到解密模块中,解密完成后输出明文。 在使用STM32实现AES加密时,需要注意安全性问题。加密秘钥需要保密,并且需要采取安全措施来保护加密模块不被攻击者利用。除此之外,还需要对加密算法进行适当的实现和使用,确保数据的机密性和完整性不受到破坏。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值