龙空技术网

加密之STM32

华维单片机编程 392

前言:

眼前你们对“stm32程序加密算法”大约比较珍视,你们都想要学习一些“stm32程序加密算法”的相关文章。那么小编同时在网上网罗了一些对于“stm32程序加密算法””的相关内容,希望兄弟们能喜欢,姐妹们一起来学习一下吧!

加密在我们日常生活之中随处可见,每个人都需要有自己的私密空间,手机中更是拥有众多小秘密。我们手机中的数字密码、图形密码、指纹密码的出现就是为了保护个人隐私。

在网络发达的今天,选择加密已是我们别无选择。虽然我们知道在互联网上进行文件传输、电子邮件等商务往来存在许多不安全因素,特别是对于研发公司和一些机密文件在网络上传输存在着风险隐患,但是互联网的高效性让我们只能通过加密的方法解决。而且这种不安全性是互联网存在基础——TCP/IP协议所固有的,包括一些基于TCP/IP的服务;另一方面,互联网给众多的商家带来了无限的商机,互联网把全世界连在了一起,走向互联网就意味着走向了世界,这对于无数企业家无疑是梦寐以求的好事,特别是对于中小企业。

那我们的STM32是如何加密的呢?其中的一个方法就是禁止读出Flash存储器内容,大家通常说的“加密”是作用于整个Flash存储区域。一旦设置了Flash的读保护,内置的Flash存储区只能通过程序的正常执行才能读出,通过调试器(JTAG或SWD)和从RAM中启动这两种方式是不能读出程序的。我们在程序加密的目的是防止板子中的程序被其他人读出使用。

设想一下你公司在进行着某个招标项目的投标工作,工作人员通过电子邮件的方式把他们单位的标书发给招标单位,如果此时有另一位竞争对手从网络上窃取到你公司的标书,从中知道你公司投标的标的,那后果将是让无数个废寝忘食的日夜白白的浪费掉。让你辛苦的劳动成果变得毫无价值。

下面就是具体的代码操作:

if (FLASH_GetReadOutProtectionStatus()!=SET)

{

FLASH_ReadOutProtection(ENABLE);

FLASH_Lock();

}

解除保护:

if (FLASH_GetReadOutProtectionStatus()==SET)

{

FLASH_Unlock();

FLASH_ReadOutProtection(DISABLE);

}

这种方式可以通过RAM启动和IAP的方式解除保护,但是解除保护的同时FLASH也被擦除了。

还有一种加密是用ID加密程序,这是一种相对于比较可靠的方式,每个MCU都有唯一的ID,这个唯一码可以利用作软件加密,ID号是12个字节大小共96位,ID号的起始地址是0x0x1FFFF7E8。利用这个ID码程序在运行时比较ID码是否正确来判断是否往下执行程序。我们将底板也设定一个属于自己的ID号,并且把它保存到程序当中,及时别人破解了程序也不能在你的板卡上使用;这个方法维护起来会比较麻烦。

U8 sys_id[12]={0}; //存储stm32芯片的ID号的数组

for(i=0;i<12;i++)

{

sys_id[i]=*(u8*)(0x1FFFF7E8+i); //读取STM32芯片的唯一ID

}

希望以上的知识能够给大家提供帮助,这期我们先分享到这里,觉得有用的可以给华维点个赞关注一下!

想要一起学习单片机的朋友,评论”我要入门“,有惊喜,加入我们,就可以与导师一对一互动,快速成长

标签: #stm32程序加密算法