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

转自:http://www.javashuo.com/article/p-gmxsgvlr-n.html算法

把全部的准备工做都作完了之后,能够将加密算法移植到咱们具体的项目中去了,在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,以后也还有许多的问题这里就说说这个相对拖得比较久一点的问题。 .net

相关文章
相关标签/搜索