#define FLASH_ID_OFFSET 30000    //任意定义一个数

//把地址直接减去或者加上一个数是不要程序中直接出现这个地址

volatile u32 Flash_ID_addr[3]={

0x1FFFF7E8 - FLASH_ID_OFFSET,

0x1FFFF7EC + FLASH_ID_OFFSET,

0x1FFFF7F0 - FLASH_ID_OFFSET

};

/**读取STM32 FLASH ID**/

void Flash_Read_ID(u32 *p)
{
  u32 Addr;
  //因为不想让程序在反汇编后直接找到这个地址,所以这个地址是运算出来

//的,跟STM_ID_addr反运算,当然也可以用其他高级算法,不能让编译器

//优化这个地址

Addr = Flash_ID_addr[0] + FLASH_ID_OFFSET;
  p[0] = *(u32*)(Addr);

Addr = Flash_ID_addr[1] - FLASH_ID_OFFSET;
  p[1] = *(u32*)(Addr);

Addr = Flash_ID_addr[2] + FLASH_ID_OFFSET;
  p[2] = *(u32*)(Addr);
}

/*加密ID并保存*/
void Encrypted_ID(void)
{
  u32 FlashID[3],data;
  Flash_Read_ID(FlashID);
  //这里可以用其他一些高级算法,但减和加要一样
  
  data=(FlashID[0]|FlashID[1]|FlashID[2])&(~FlashID[1])|(~FlashID[2]);

FLASH_Unlock();
  FLASH_ErasePage(FLSAH_EN_ID_START_ADDR);
  FLASH_ProgramWord(FLSAH_EN_ID_START_ADDR,dat);//保存这个数
  FLASH_Lock();
}

/*比较加密ID,正确返回0 不正确返回1*/
u32 CMP_Encrypted_ID(void)
{
  u32 FlashID[3],data1,dat2;
  Flash_Read_ID(FlashID);
  //这里可以用其他高级算法,但减和加要一样
  data1=(FlashID[0]|FlashID[1]|FlashID[2])&(~FlashID[1])|(~FlashID[2]);

data2 = *(u32*)(FLSAH_EN_ID_START_ADDR);

if(data1==data2) //相同
    return 0;
  else         //不同
    return 1;
}

//ID加密控制
if(CMP_Encrypted_ID())
{
  //生产时给一些条件,条件满足就对ID加密,加密完后,也可以让它自宫
  if(****)
  {
    Encrypted_ID();
    .....
    自宫
  }
}

//校验ID是否正确
if(CMP_Encrypted_ID())
{
  程序来到这里当然不正确了,不要让程序死在这里。一个系统肯定有

  一些参数才能运行的,你可以改变一些参数,可以让系统有时正常有

时不正常。

}

STM32的FLASH ID加密的更多相关文章

  1. 关于STM32的FLASH操作【转载】

    说到STM32的FLSAH,我们的第一反应是用来装程序的,实际上,STM32的片内FLASH不仅用来装程序,还用来装芯片配置.芯片ID.自举程序等等.当然, FLASH还可以用来装数据. FLASH分 ...

  2. php利用32进制实现对id加密解密

    前言 最近在项目中遇到一个问题,当前用户分享一个邀请码给好友,好友根据邀请码注册成为新用户之后,则成为当前用户的下级,特定条件下,可以得到下级用户的一系列返利.这里要实现的就是根据当前用户的id,生成 ...

  3. flash stm32的flash编写

    定义一个全局变量数组:const u8 TEXT_Buffer[]={"STM32F103 FLASH TEST"};    //u8和char* 写入到内存里会有什么区别???? ...

  4. STM32全球唯一ID读取方法

    产品唯一的身份标识非常适合:● 用来作为序列号(例如USB字符序列号或者其他的终端应用)● 用来作为密码,在编写闪存时,将此唯一标识与软件加解密算法结合使用,提高代码在闪存存储器内的安全性.● 用来激 ...

  5. STM32唯一的ID

    请看如下程序: /*------------------------------------------------------------------------------------------ ...

  6. USB Mass Storage学习笔记-STM32+FLASH实现U盘

    一.内容概述  采用STM32内部自带USB控制器外加大页NAND FLASH K9F1G08U0A实现一个128M的U盘. 1.STM32的USB控制器 STM32F103的MCU自带USB从控制器 ...

  7. STM32内部flash存储小数——别样的C语言技巧

    今天在进行STM32内部falsh存储的时候,发现固件库历程的函数原型是这样的: 第一个是地址,在我的STM32中是2K一页的,第二个是要写入的数据. 问题就来了,存储一个小数该怎么办呢?固件库给的是 ...

  8. STM32的Flash

    STM32中存储区分为:随机存取存储器RAM和只读存储器ROM. 其中: RAM为常说的内存,比如手机的2G内存4G内存等,就是程序跑起来的时候所占用的存储空间,特点是掉电数据丢失. ROM为常说的硬 ...

  9. stm32的flash操作注意事项

    从STM32编程手册中,可以知道:在进行写或擦除操作时,不能进行代码或数据的读取操作. 比如:你在写Flash期间有接收串口数据,很有可能会丢串口数据. 因为比较耗时,所以,在写数据时,CPU不会执行 ...

随机推荐

  1. html网页什么样的字体最好看,css设置各种中文字体样式代码

    css代码如下:{ font-family:"Microsoft YaHei",微软雅黑,"MicrosoftJhengHei",华文细黑,STHeiti,Mi ...

  2. Hibernate.基础篇《一》.Hibernate工具类.

    Hibernate.基础篇<一>.Hibernate工具类. 话述: Hibernate.基础篇第一篇,前面是代码.后面再加理论&实践. Hibernate使用的版本是:5.x,在 ...

  3. python3学习笔记之安装

    一.Python安装 1.下载地址:  https://www.python.org/downloads/release/python-365/ 2. Linux系统自带Python2.7,如需安装3 ...

  4. 记在Archlinux中安装python的pymssql模块过程中遇到的问题

    为什么要安装这个模块?因为要连接SQLServer数据库. 看到可以使用pyodbc这个模块进行连接,但对odbc不熟悉,所以选用了看起来更简单的 pymssql. 直接执行: pip install ...

  5. jQuery文档操作--append()、prepend()、after()和before()

       append(content|fn)  概述 向每个匹配的元素内部追加内容,这个操作与对指定的元素执行appendChild方法,将它们添加到文档中的情况类似 参数    content  要追 ...

  6. 【Hadoop学习之三】Hadoop全分布式安装

    环境 虚拟机:VMware 10 Linux版本:CentOS-6.5-x86_64 客户端:Xshell4 FTP:Xftp4 jdk8 hadoop3.1.1 全分布式就是集群,注意配置主机名. ...

  7. wrapper class (Integer 为例)

    1,导入 Integer a = 100; Integer b = 100; Integer c = 150; Integer d = 150; a == b; true c == d; false ...

  8. qt5 移植 交叉编译出现错误

    类似这样的错误,当时没有完整的记下来,undefined reference to `std::__detail::_List_node_base@GLIBCXX_3.4.10 当时是在编译qt5cl ...

  9. Spring源码阅读(一)

    Spring通过配置文件或者注解对类实例进行加载管理.稍微思考,可以猜测spring加载过程肯定先把配置转化为统一的配置对象,再把通过配置对象生产类实例.阅读源码,我们也可以发现这个逻辑. sprin ...

  10. golang学习笔记10 beego api 用jwt验证auth2 token 获取解码信息

    golang学习笔记10 beego api 用jwt验证auth2 token 获取解码信息 Json web token (JWT), 是为了在网络应用环境间传递声明而执行的一种基于JSON的开放 ...