STM32的FLASH ID加密

#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())
{
? 程序來到這里當然不正確了,不要讓程序死在這里。一個系統肯定有

? 一些參數才能運行的,你可以改變一些參數,可以讓系統有時正常有

? 時不正常。

}

?

轉載于:https://www.cnblogs.com/dongry/p/9938557.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/278948.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/278948.shtml
英文地址,請注明出處:http://en.pswp.cn/news/278948.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

linux c視頻如何加水印,如何在Kdenlive的視頻上進行水印 | MOS86

如果你這些東西被稱為水印。他們So,你如何在Linux中創建水印?嗯,你這可能是Linux上最強大的開源視頻編輯器。Installation如果您尚未安裝Kdenlive,您應該可以在包裹管理器中找到它。在Ubuntu中,您還可以使用命令:sudo …

mac觸控板手勢無法使用_如何在iPad上使用觸控板手勢

mac觸控板手勢無法使用Apple蘋果Apple’s new floating Magic Keyboard case for the iPad Pro looks fantastic, but you don’t need to spend $299 to use a trackpad. Simply connect a Magic Trackpad or a third-party multi-touch trackpad to get access to all of iPa…

02.并發編程(2)Thread類源碼分析

概述 在說線程之前先說下進程,進程和線程都是一個時間段的描述,是CPU工作時間段的描述。 進程,是并發執行的程序在執行過程中分配和管理資源的基本單位,是一個動態概念,竟爭計算機系統資源的基本單位。每一個進程都有一…

安裝SQLserver2008

雙擊點擊setup,以管理員身份運行; 點擊安裝-》全新SQLServer獨立安裝或向現有安裝添加功能 選擇下一步,然后點擊具有高級服務的express版本,點擊下一步; 點擊選擇我接受許可條款,然后繼續點擊下一步&#x…

如何在沒有Word的情況下打開Microsoft Word文檔

Microsoft Word is part of Microsoft Office and requires an up-front purchase or a Microsoft 365 subscription. If you’re using a computer without Word installed, there are other ways to view that DOCX or DOC file. Microsoft Word是Microsoft Office的一部分&a…

redhat9Linux解壓gz,linux (redhat9)下subversion 的安裝

搞了一個subversion 花費了我兩天的時間,其間雖然有干其他的事情,但是來來回回的裝,搞的我是一點脾氣都沒有了,俗話說不經歷風雨真的見不到彩虹。就是這個意思. 原本本的下來一.準備好安裝包打算使用apache來瀏覽subversion &…

數組去重的4種方法(Which one is the fastest???嘻嘻嘻....)

<!DOCTYPE html> <html lang"en"> <head> <meta charset"UTF-8"> <title>Document</title> </head> <body> <input type"button" value"數組去重1" οnclick"show()"&g…

flask中的模型

1.什么是模型   模型&#xff0c;是根據數據庫中表的結構而創建出來的class。每一張表對應到編程語言中&#xff0c;就是一個class表中的每一個列對應到編程語言中就class中的一個屬性。 2.ORM的三大特征   1.數據表(table)到編程類(class)的映射     數據庫中的每一張…

windows復制文件路徑_如何在Windows 10上復制文件的完整路徑

windows復制文件路徑Sometimes, it’s handy to copy the full path of a file or folder in Windows 10 to the clipboard. That way, you can paste the path into an open or upload dialog quickly without having to browse for it the file. Luckily, there’s an easy w…

用c語言復制字符串的元音字母,急求:編寫程序,將一個字符串中的元音字母復制到另一個字符串,然后輸出。...

#include#includevoid str(char a[100],char b[100]){int i0, j0;while(a[i]!\0)//\0代表ASCLL碼0的字符&#xff0c;即是一個空操作符也就是是結束符;{if(a[i]a||a[i]e||a[i]i||a[i]o||a[i]u){b[j]a[i];j;}i;}}int main(){char a[100];char b[100];gets(a);str(a,b);puts(b);r…

05 替換空格

題目描述&#xff1a; 請實現一個函數&#xff0c;將一個字符串中的每個空格替換成“%20”。例如&#xff0c;當字符串為We Are Happy.則經過替換之后的字符串為We%20Are%20Happy。 解題思路有&#xff1a; #判斷字符串是否為空&#xff0c;判斷length是否大于0。 #記錄空格的數…

超鏈接禁用_在Microsoft Word 2003和2007中禁用自動超鏈接

超鏈接禁用If you can’t stand the automatic hyperlinking in Microsoft Word, you might be hard-pressed to find the right place to disable it in Office 2007, since all the settings are hidden so well compared to previous versions. 如果您無法在Microsoft Word中…

c語言如何創建虛擬串口,模擬串口的C語言源程序代碼

本程序是模擬串口硬件機制寫的&#xff0c;使用時可設一定時中斷&#xff0c;時間間隔為1/4波特率&#xff0c;每中斷一次調用一次接收函數&#xff0c; 每中斷4次調用一次發送函數,不過.對單片機來說時鐘并須要快.要知道9600的波特率的每個BIT的時間間隔是104us.而單片機中斷一…

webjars管理靜態資源

webjars用途簡單解釋 : 利用Servlet3協議規范中,包含在JAR文件/META-INF/resources/路徑下的資源可以直接被web訪問到這一原理&#xff0c;將前端靜態資源打成jar包方便管理 靜態資源打jar包 新建maven工程&#xff0c; 將需要打包的靜態資源放入src/main/resources中 2. ma…

Windows Intellij環境下Gradle的 “Could not determine Java version from ‘9.0.1’”的解決方式...

當我導入Gradle項目初試Java spring的時候&#xff0c;遇到下面報錯: Gradle complete project refresh failed Error:Could not determine java version from 9.0.1. 參考這篇 http://www.ddiinnxx.com/solving-not-determine-java-version-9-0-1-gradle-intellij-macosx/ 進行…

如何計算iPhone和Apple Watch上的步數

Khamosh PathakKhamosh PathakAccording to conventional wisdom, 10,000 steps a day equals a healthy life. No matter what your target is, though, you’ll need a reliable way to count your steps. The good news is you can do so on your iPhone or Apple Watch! 根…

在c語言中load,一道題理清Objective-C中的load和initialize

Objective-C中有兩個方法比較特殊&#xff0c;他們會在Runtime時根據情況自動調用&#xff0c;下面我們簡單分析一下調用時機以及使用場景~一般在iOS初中級面試時偶爾會被問到load和initialize方法&#xff0c;我出了一道題&#xff0c;估計會搞暈很多人。大家來看一下下面的程…

018.Zabbix維護時間和模板導入

一 維護時間 在某些正常業務維護期間&#xff0c;不需要進行告警&#xff0c;可添加維護時間。二 維護時間添加 2.1 維護 參數描述Name維護名稱Maintenance type兩種維護類型可選:With data collection - 依舊收集數據No data collection - 暫停收集數據Active since維護周期開…

本地服務器下的局域網安全嗎_本地安全認證服務器

本地服務器下的局域網安全嗎Today a reader had a very good question about lsass.exe is the Microsoft security management process for domain access and local security policies. Simply put it manages who logs on to your PC and/or Server. There are a few viru…

Query-digest-UI監控慢查詢,以及此工具的改進版

本文主要描述基于pt-query-digest工具對慢查詢日志進行監控的工具Query-digest-UI。(安裝、使用、介紹以及benren提供的改進版。) 本文中描述的內容與其他網站上對Query-digest-UI的安裝和使用稍有不同&#xff0c;因為本人對此工具稍做了調整。歡迎轉載&#xff0c;請注明作者…