精华内容
下载资源
问答
  • 大家好!我叫肖亚平,从小热爱上了电子技术,读书时阴差阳错选择了电子这方面专业,学习电子技术...STM32通过读取芯片唯一ID号来实现程序保护,防止被抄袭。STM32芯片通过STlink可以把程序读出来。只要在相同...

    大家好!我叫肖亚平,从小热爱上了电子技术,读书时阴差阳错的选择了电子这方面的专业,学习电子技术、一直到今年毕业。对于我的理解来说,学校里面学到的技术不是全部实用,但是必须有用,所以一直奋斗在前线。我对学习总结出一句话“压力不是有人努力,而是比你牛X N倍的人依然在努力

     

    STM32通过读取芯片唯一ID号来实现程序的保护,防止被抄袭。STM32芯片通过STlink可以把程序读出来。只要在相同的芯片上面,就可以跑起来,那么如何才能让一个程序只能够在一个芯片上正常运行呢?

    经过一个下午的时间,总结出这个方法。通过读取ID号,然后在修改HEX文件来保护自己的程序不被抄袭,相对于开发成本中等的产品,还是有用的。但是,有一点麻烦。我用的是STM32F103ZET6芯片。下面将介绍详细的步骤和方法。

     

    一.获取ID码

     

    1. 工欲善其事,必先利其器,准备好工具,需要一个STlink及下载软件,一个可以正常运行的硬件。
    2. uint16_t temp[12];   //存放芯片ID的临时变量
    3. uint16_t aa[12] = {0xee,0x01,0x02,0x03,0x04,
    4.                0x05,0x06,0x07,0x08,0x09,
    5.                0x10,0x11};//预置ID号,在HEX文中修改。
    6.  
    7. aa这个数组用于存放预置ID号

    复制代码

     

    1. /******************************************************************************
    2. 函数名称:读取芯片唯一ID码
    3. 创建时间:2015-08-11
    4. 修改时间:2015-08-11
    5. 备    注:
    6. ******************************************************************************/
    7.  
    8. void Get_ChipID(void)
    9. {
    10.     u32 temp0,temp1,temp2;
    11. temp0 = *(__IO u32*)(0x1FFFF7E8);    //产品唯一身份标识寄存器(96位)
    12.     temp1 = *(__IO u32*)(0x1FFFF7EC);
    13. temp2 = *(__IO u32*)(0x1FFFF7F0);
    14.                                   
    15. //ID码地址: 0x1FFFF7E8   0x1FFFF7EC  0x1FFFF7F0 ,只需要读取这个地址中的数据就可以了。
    16.  
    17.     temp[0] = (u8)(temp0 & 0x000000FF);
    18.     temp[1] = (u8)((temp0 & 0x0000FF00)>>8);
    19.     temp[2] = (u8)((temp0 & 0x00FF0000)>>16);
    20.     temp[3] = (u8)((temp0 & 0xFF000000)>>24);
    21.     temp[4] = (u8)(temp1 & 0x000000FF);
    22.     temp[5] = (u8)((temp1 & 0x0000FF00)>>8);
    23.     temp[6] = (u8)((temp1 & 0x00FF0000)>>16);
    24.     temp[7] = (u8)((temp1 & 0xFF000000)>>24);
    25.     temp[8] = (u8)(temp2 & 0x000000FF);
    26.     temp[9] = (u8)((temp2 & 0x0000FF00)>>8);
    27.     temp[10] = (u8)((temp2 & 0x00FF0000)>>16);
    28.     temp[11] = (u8)((temp2 & 0xFF000000)>>24);         
    29. }

    复制代码


     

    1. 通过void Get_ChipID(void)就可以得到ID码了,这个ID码可以用串口输出,也可以用STM32 ST-LINK Utility读出来。这里,两种方法我都会讲到。
    2.  
    3. 方法一:通过串口输出得到ID码。
    4.  
    5. /****************************************************************************************************************************
    6. 函数名称:串口2初始化配置
    7. 创建时间:2015-08-11
    8. 修改时间:2015-08-11
    9. 备    注:
    10. *****************************************************************************************************************************/
    11. void USART2_Config(void)
    12. {
    13. GPIO_InitTypeDef   GPIO_InitStructure;  //定义GPIO类型结构体
    14. USART_InitTypeDef  USART_InitStructure; //定义串口类型结构体
    15. RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); //配置GPIOA时钟,并使能时钟。
    16. RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2,ENABLE);//配置USART2的时钟,并使能时钟
    17. GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;       //配置PA.02作为TXD
    18. GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //配置成推挽输出
    19. GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//配置GPIO时钟为50MHZ
    20. GPIO_Init(GPIOA, &GPIO_InitStructure);           //初始化GPIO
    21. GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;  //配置PA.03作为RXD
    22. GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;  //配置GPIO输入浮空
    23. GPIO_Init(GPIOA, &GPIO_InitStructure);  //初始化GPIO
    24. USART_InitStructure.USART_BaudRate = 115200;  //配置串口波特率为115200
    25. USART_InitStructure.USART_WordLength = USART_WordLength_8b; //8位数据位
    26. USART_InitStructure.USART_StopBits = USART_StopBits_1; //1位停止位
    27. USART_InitStructure.USART_Parity = USART_Parity_No; //
    28. USART_InitStructure.USART_HardwareFlowControl = T_HardwareFlowControl_None; //硬件流程控制
    29. USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; //启动发送和接收
    30. USART_Init(USART2, &USART_InitStructure); //初始化串口2
    31.  
    32. USART_ITConfig(USART2, USART_IT_RXNE, ENABLE); //使能串口2接收中断 
    33. USART_Cmd(USART2, ENABLE); //使能外部中断
    34. }

    复制代码



     

    1. /****************************************************************************************************************************
    2. 函数名称:USART2发送数据函数
    3. 创建时间:2015-08-11
    4. 修改时间:2015-08-11
    5. 备    注:
    6. *****************************************************************************************************************************/
    7. void Usart2_SendData(uint16_t uiSendDataNumber,uint16_t * uiData)
    8. {
    9.   static uint16_t uiTempData = 0; //发送数据临时变量
    10. for(uiTempData = uiSendDataNumber;uiTempData > 0;uiTempData--) //数据的个数
    11. {
    12. USART_SendData(USART2, *uiData++); //调用发送函数
    13. //           uiData++; //发送数据的地址加1,切换到下一个要发送数据的地址。
    14. while(USART_GetFlagStatus(USART2, USART_FLAG_TXE) == RESET);//发送缓冲区空状态标志位。只有当缓冲区为空时,才发送下一个数据。
    15.   }
    16. }

    复制代码


     

    串口配置好后,就可以调用Usart2_SendData(12,temp);函数,就能在串口助手看到ID码了。

     


     

    1. 芯片唯一ID码:32 FF DA 05 43 41 38 36 30 71 02 43   96位

    复制代码

    方法二:通过STlink得到ID码。

     

    1、打开STM32 ST-LINK Utility,确保STlink与硬件连接正常。

    2、在Address中输入“0x1FFFF7E8”芯片ID码的首地址。输入完成后,STlink自动读取ID码。

     




     

    3、确定后,自动读取ID码

     

     

    但是,用STlink读出来的只有64位,少了32位,这个“0x1FFFF7F0”地址中读取失败,我也不知道是什么原因,可能是厂家不允许下载器访问。


     

    地  址

    0x1FFFF7E8

    0x1FFFF7EC

    0x1FFFF7F0

    ID数据

    05 DA FF 32

    36 38 41 43

    空(不允许读)

     

    我们把上面ID码整理一下:32 FF DA 05 43 41 38 36,由于在内存中是小端存储方式。所以是这样的。

     

    通过两种方法,把我们想要的ID码得到后。就可以进行最关键的一步,修改HEX文件。


     

    二.修改HEX文件加密

     

    1、打开STM32 ST-LINK Utility,打开HEX文件。

     

     

    1. uint16_t  aa[12] = {0xee,0x01,0x02,0x03,0x04,
    2.                0x05,0x06,0x07,0x08,0x09,
    3.                0x10,0x11};//预置ID号,在HEX文中修改。

    复制代码

     

    现在就打HEX文件打开后。找到上面定义的数组,这个是关键所在,我花了一个下午时间,才搞清楚。



     

    [size=9.0000pt]2、找到自定义ID在地址的位置后,开始修改。

     




     

    3、把数组“aa[12]” 里面的内容改成与芯片的实际ID码一致。如果程序被读出来,在另外一片相同的芯片上面也运行不起来。因为设置的ID与芯片实际ID不一致。

     



     

    4、现在如果下载,会提示你文件被修改,需要保存。我们保存成HEX文件到桌面。

     


     

    5、重新打开刚才保存的HEX文件。现在可以看到,修改的ID已经在HEX文件里面了。

     




     

    6、下载程序到单片机。

     

     

    7、完成下载。到这儿就基本完成了。

     

    8、看到这儿,有的人会问,为什么不在编译时直接放在数组里,还要在HEX文件中修改,这样做的目的是方便批量生产。


     

     

    1. 在程序中,我做了一个简单的判断。如下
    2.   Get_ChipID();  //先读出芯片实际ID          
    3.   for(i=0;i<12;i++)
    4.         {
    5.                         if(temp == aa) //判断设置的ID与实际ID是不是一致。如果一致。LED灯不亮
    6.                         {
    7.                                 ;
    8.                         }
    9.                         else
    10.                         {
    11.                                  GPIO_ResetBits(GPIOF, GPIO_Pin_6);
    12.             }
    13.   }

    复制代码

    展开全文
  • 在对内部 Flash 进行编程前将唯一 ID 与软件加密原语和协议结合使用时用作安全密钥以提高 Flash 中代码安全性 激活安全自举过程等 在资料中对其特性描述是:96 位的唯一设备标识符提供了一个对于任何设备和任何...

    一、基本描述

    在STM32的全系列MCU中均有一个96位的唯一设备标识符。在ST的相关资料中,对其功能的描述有3个方面:

    • 用作序列号(例如 USB 字符串序列号或其它终端应用程序)
    • 在对内部 Flash 进行编程前将唯一 ID 与软件加密原语和协议结合使用时用作安全密钥以提高 Flash 中代码的安全性
    • 激活安全自举过程等
      在资料中对其特性的描述是:96 位的唯一设备标识符提供了一个对于任何设备和任何上下文都唯一的参考号码。用户永远不能改变这些位。96 位的唯一设备标识符也可以以单字节/半字/字等不同方式读取,然后使用自定义算法连接起来。
      想要读取唯一ID,就需要知道它的存储地址,在不同系列的MCU中地址是有差别的,我们查询了部分MCU的资料并将其总结如下:
      在这里插入图片描述

    二、获取唯一ID

    前面我们对唯一ID做了简单的描述,并且得到了其存储地址,接下来我们说以说如何得到这个ID。

    前面已经描述过唯一ID可以按字节、半字、字等方式读取。唯一ID是一个96位的信息串,所以按字读取就是3个字,按半字读取就是6个,按字节读取就是12个。本质上没有区别,在这里我们按字读取。

    typedef enum
    {
      STM32F0,
      STM32F1,
      STM32F2,
      STM32F3,
      STM32F4,
      STM32F7,
      STM32L0,
      STM32L1,
      STM32L4,
      STM32H7,
    }MCUTypedef;
     
    uint32_tidAddr[]=
    {
        0x1FFFF7AC,  /*STM32F0唯一ID起始地址*/
        0x1FFFF7E8,  /*STM32F1唯一ID起始地址*/
        0x1FFF7A10,  /*STM32F2唯一ID起始地址*/
        0x1FFFF7AC,  /*STM32F3唯一ID起始地址*/
        0x1FFF7A10,  /*STM32F4唯一ID起始地址*/
        0x1FF0F420,  /*STM32F7唯一ID起始地址*/
        0x1FF80050,  /*STM32L0唯一ID起始地址*/
        0x1FF80050,  /*STM32L1唯一ID起始地址*/
        0x1FFF7590,  /*STM32L4唯一ID起始地址*/
        0x1FF0F420	 /*STM32H7唯一ID起始地址*/
    };
     
    /*获取MCU的唯一ID*/
    voidGetSTM32MCUID(uint32_t *id,MCUTypedef type)
    {
        if(id != NULL)
          {
                id[0]=*(uint32_t*)(idAddr[type]);
                id[1]=*(uint32_t*)(idAddr[type]+4);
                id[2]=*(uint32_t*)(idAddr[type]+8);
          }
    }
    

    三、使用唯一ID

    我们得到唯一ID当然是为了使用它,前面在ST资料中描述了三个使用方式。我们在这里来使用它实现软件权限的限制。那么如何用唯一ID来实现软件运行权限的限制呢?我们说一说思路:

    • 首先,我们需要指定一个Flash地址,至于于地址空间的大小则与我们需要存储的信息有关,一般都不会太长。不管选用多大的空间都需要将其清零,即初始化为0xFF。
    • 接下来再程序运行前读取前面指定的地址并读取其值,并判断是否全部为0xFF,即判断程序是否第一次运行。如果是,那么就获取唯一ID并作相应的处理,然后将信息写入前面的地址中。
    • 如果不是第一次运行,则读取指定地址的值,并用同样的算法处理唯一ID。然后比较存储的信息与计算的信息是否一致,一致则启动程序运行,不一致则终止运行。
    • 如果有人使用工具读出FLASH内容时,因为改制定的地址已经被写入了信息,所以如果把读出的文件再烧到其它MCU芯片,因唯一ID不同所以信息完全不符程序就不会运行。从而实现了对程序权限的限制。
    展开全文
  • 每个STM32一个独立的ID,这个ID可以用来: 产品唯一的身份标识作用:●用来作为序列号(例如USB字符序列号或者其他终端应用);●用来作为密码,在编写闪存时,将此唯一标识与软件加解密算法结合使用,提高代码...

    每个STM32有一个独立的ID,这个ID可以用来:

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

    以STM32F103CBT6来说,使用四个寄存器来存储这个ID,读取方式为:

    void GetChipUniqueID(void)
    {
        
        u32 chipUniqueID32[3];
    
        chipUniqueID32[0] = *(__IO u32*)(0X1FFFF7F2);//ID地址的高32位寄存器地址
        chipUniqueID32[1] = *(__IO u32*)(0X1FFFF7EE);//ID地址的中32位寄存器地址
        chipUniqueID32[2] = *(__IO u32*)(0X1FFFF7E8);//ID地址的低32位寄存器地址
        
        printf("此芯片的唯一ID为:%d-%d-%d\r\n",chipUniqueID32[0],chipUniqueID32[2],chipUniqueID32[2]);
    
    }

     注意:在读取唯一身份识别ID的时候要注意存储方式是小端模式。

     

     

     

    读取Flash大小的方式为:

    void GetFlashSize(void)
    {
        u16 Stm32_Flash_Size;
        
        Stm32_Flash_Size = *(u16*)(0x1FFFF7E0);//闪存容量寄存器
        
        printf("芯片闪存容量大小为%dK\r\n",Stm32_Flash_Size);
    
    }

     

    转载于:https://www.cnblogs.com/jiwangbujiu/p/6667140.html

    展开全文
  • [STM8] 通过STM8芯片唯一ID加密程序

    千次阅读 2017-06-28 19:12:16
    ...科研成果保护是每一个科研人员最关心事情,为了不使自己辛苦劳动付之东流,程序加密是十分必要。加密程序方法软件加密,硬件加密,软/硬件综合加密,时间加密,错误引导加密,专利保

    原文地址::http://bbs.21ic.com/forum.php?mod=viewthread&tid=1635996&highlight=%E5%8A%A0%E5%AF%86



    程序加密

    科研成果保护是每一个科研人员最关心的事情,为了不使自己的辛苦劳动付之东流,程序加密是十分有必要的。加密程序的方法有软件加密,硬件加密,软/硬件综合加密,时间加密,错误引导加密,专利保护等措施。有矛就有盾,有盾就有矛,有矛、有盾,才促进矛、盾质量水平的提高。好的加密算法可以更大程度的提高源程序的安全性。
    44.2 STM8单片机ID码   
        STM8为每一片芯片都提供了一个世界唯一的ID码,相当于我们的身份证号码。我们可以通过唯一的ID码进行程序加密。
    44.3 实验目的   
    实验步骤:
        1.获取STM8芯片唯一ID码。
        2.通过STM8芯片的ID码实现简单的程序加密。
    44.4 程序文件设计   44.4.1  main.c文件中的程序
    主程序就实现初始化和调用驱动程序,这样主程序控制思路清晰,流程简单。要想了解全面详实的程序,请大家参考光盘(网盘)中程序及程序注释。
    1. /***********************************************************************
    2. *   说    明: 窗口看门狗实验电路
    3. *   开发平台: 剑齿虎STM8开发板        
    4. *   作    者: 刘洋 张殿东
    5. *   版    本: V1.0
    6. *   日    期: 2016-05-03   
    7. *
    8. *   IAR开发环境    版本 V2.20.1
    9. *   ST库函数       版本 V2.2.0
    10. ***********************************************************************/
    11. #include "pbdata.h"//引入自定义公共头文件
    12. void BSP_Configuration(void);//硬件初始化函数声明
    13. /***********************************************************************
    14. *   函 数 名: main
    15. *   功能说明: c程序入口
    16. *   形    参:无
    17. *   返 回 值: 错误代码(无需处理)
    18. ***********************************************************************/
    19. int main(void)
    20. {
    21.   BSP_Configuration();//硬件驱动初始化函数
    22.   printf("窗口看门狗测试程序\r\n");
    23.   while(1)//主程序循环,反复执行循环体里的语句
    24.   {
    25.     WWDG_Refresh();
    26.   }
    27. }
    28. /***********************************************************************
    29. *   函 数 名: BSP_Configuration
    30. *   功能说明: 初始化硬件设备。只需要调用一次。该函数配置CPU寄存器和外设的寄存器并初始化一些全局变量。
    31. *   形    参:无
    32. *   返 回 值: 无
    33. ***********************************************************************/
    34. void BSP_Configuration(void)
    35. {  
    36.   CLK_HSIPrescalerConfig(CLK_PRESCALER_HSIDIV1);//时钟速度为内部16M,1分频,
    37.   UART1_Congfiguration();//调用RS232串口1初始化函数
    38.   LED_Init();//调用LED初始化函数
    39.   delay_ms(1000);
    40.   WWDG_Configuration();
    41.   rim();//打开总中断
    42. }
    43. /*断言函数:它的作用是在编程的过程中为程序提供参数检查*/
    44. #ifdef USE_FULL_ASSERT
    45. void assert_failed(u8* file,u32 line)
    46. {
    47.   while(1)
    48.   {
    49.   }
    50. }
    51. #endif
    复制代码

    pbdata.c文件中的程序
    1. #include "pbdata.h"   //引入自定义公共头文件
    2. /***************************************************************************
    3. *   函 数 名: delay_us
    4. *   功能说明: 微秒延时程序,注意此函数的运行环境为(16M时钟速度)
    5. *   形    参:nCount要延时的微秒数,输入nCount=1微妙
    6. *   返 回 值: 无
    7. ***************************************************************************/
    8. void delay_us(u16 nCount)   //16M 晶振时  延时 1个微妙
    9. {
    10.     nCount*=3;//等同于 nCount=nCount*3  相当于把nCount变量扩大3倍
    11.     while(--nCount);//nCount变量数值先减一,再判断nCount的数值是否大于0,大于0循环减一,等于0退出循环。
    12. }
    13. /***************************************************************************
    14. *   函 数 名: delay_ms
    15. *   功能说明: 毫秒延时程序,注意此函数的运行环境为(16M时钟速度)
    16. *   形    参:nCount要延时的毫秒数,输入nCount=1毫秒
    17. *   返 回 值: 无
    18. ***************************************************************************/
    19. void delay_ms(u16 nCount)  //16M 晶振时  延时 1个毫秒
    20. {
    21.     while(nCount--)//先判断while()循环体里的nCount数值是否大于0,大于0循环,减一执行循环体,等于0退出循环。
    22.     {
    23.         delay_us(1000);//调用微妙延时函数,输入1000等译演示1毫秒。
    24.     }
    25. }
    26. /***************************************************************************
    27. *   函 数 名: Get_decimal
    28. *   功能说明: 获得数值小数部分
    29. *   形    参:dt输入数据 deci小数位数,最多保留4位小数
    30. *   返 回 值: 放大后的小数部分
    31. ***************************************************************************/
    32. u16 Get_decimal(double dt,u8 deci)   //获得数值小数部分
    33. {
    34.     long x1=0;
    35.     u16 x2=0,x3=0;
    36.     if(deci>4) deci=4;
    37.     if(deci<1) deci=1;
    38.     x3=(u16)pow(10, deci);
    39.     x1=(long)(dt*x3);
    40.     x2=(u16)(x1%x3);
    41.     return x2;
    42. }
    复制代码

    展开全文
  • 生成全局唯一的ID,java 中

    千次阅读 2013-08-28 14:57:24
    时候我们需要生成一个全局唯一的id,可以用随机生成数加上其他数,但是这样也不算全局唯一。  java.util.UUID 是128位整数全局唯一标识符。它保证在同一时空中所有机器都是唯一的。 他用到了 以太网卡地址...
  • 数据库唯一id生成策略

    千次阅读 2019-03-24 00:03:55
    分布式,高并发下id生成要求 全局唯一 趋势递增 效率高(生成.使用....控制并发 一 . Uuid(uuid/guid[通用唯一识别码]) ...全局唯一的ieee机器识别号(如果网卡,从网卡获取,没有网卡以其他方式获取) ...
  • 在实际的项目当中,我们的时候需要一个唯一的芯片ID,使得同一份固件可以得到不同的ID,之前用过nodemcu的固件,里面一个函数node.chipId(),这个函数可以用来获取某一个ESP8266的ID,但是RTOS_3.2版本中我并未...
  • Android 获取设备唯一ID

    万次阅读 2017-06-12 14:03:24
    只能在安卓手机上,需要支持Sim芯片,需要在...作为手机来讲,IMEI是唯一的,它应该类似于 359881030314356(除非你一个没有量产手机(水货)它可能无效IMEI,如:0000000000000)。 private String g
  • STM32每一个芯片一个电子签名,唯一的身份识别ID。本章我们学习获取STM32电子签名信息,数据手册请参看第28章。 实验简介 电子签名存放字闪存存储器模块系统存储区域,可以通过JTAG/SWD或者CPU读取。它所...
  • 使用STM32芯片ID作为MAC地址

    千次阅读 2018-12-29 09:48:49
    STM32每个系列都会有唯一的一个芯片序列号(96位bit):  STM32F10X 地址是 0x1FFFF7E8   STM32F20X 地址是 0x1FFF7A10  STM32F30X 地址是 0x1FFFF7AC  STM32F40X 地址是 0x1FF...
  • 唯一ID号生成技术-UUID

    2010-07-23 14:44:29
    最近个项目要求服务器上生成唯一的ID号,首先就想到了UUID,它能够保证唯一性。   UUID(Universally Unique Identifier)全局唯一标识符,是指在一台机器上生成数字,它保证对在同一时空中所有机器都是唯一...
  • 4418 和 6818 芯片内部都有唯一的标识 ID,也就是 UID,它是一个 64 位二进制数,可 以作为唯一板子标识。本文档介绍是在最小 linux 系统下 iTOP-4418 UID 读取方法,6818 类似,其它系统也是类似。 和文档一起...
  • IMX6 芯片内部都有唯一的标识 ID,也就是 UID,它是一个 64 位二进制数,可以作为唯一板子标识。本文档介绍是在最小 linux 系统下 iTOP-IMX6 UID 读取方法,其它系统也是类似。和文档一起压缩包中有“catuid”和...
  • IoT设备IDID²)是IoT设备受信任身份标识符,它不能被篡改,不能伪造,并且是世界上唯一的安全属性。 它是一切互连和服务流通关键基础架构。 ID²客户端SDK用于设备端开发和调试,帮助开发人员快速访问ID²...
  • 1、条码卡:该卡卡面上一串条码,通过扫描枪或者相应...反面磁条仅仅存蓄号码不存其它任何东西,因为磁卡号码的唯一性,保证了不同用户的卡号不同。用磁卡实现会员管理时候,会员储蓄金额、积分、或者折扣等形...
  • 交换机芯片vlan管理

    千次阅读 2018-09-06 19:58:39
     PVID: 端口缺省vlan ID,当收到数据包不携带vlan tag时候,芯片会给数据包打上PVID,然后进行转发    vlan三个重要属性:VID,member port 和 untag port  VID : 唯一标识一个vlan  member ...
  • 其实STM32的及其它类型的MCU如ATMEL,GD等公司的芯片都自带有唯一序列码,在设备开发时可以用这个芯片唯一码(UID)来标志设备的唯一。本节以stm32为例,介绍如何读取芯片的唯一码(UID)并用它产生其它格式的唯一码...
  • 目前电子产品被盗版是很平常事,让很多产品开发者头痛,现在很多芯片都带一个全球唯一的ID号码,这样就了好防盗措施。 首先我们编写一段代码来读取芯片的ID号,在EEPROM中放置一段参数,当读取的ID号与...
  • 如果想这么做,IMX6已经帮你想好了,每个IMX6芯片内部都有唯一的标识ID,也就是UID,全球唯一哦!。 那么怎么读取这个UID呢,下面介绍读取UID办法: root@linaro-ubuntu-desktop:~#cat /sys/fsl...
  • UUID全局唯一标识符

    2015-12-10 10:26:10
    按照开放软件基金会(OSF)制定标准计算,用到了以太网卡地址、纳秒级时间、芯片ID码和许多可能数字。由以下几部分组合:当前日期和时间(UUID第一个部分与时间有关,如果你在生成一个UUID之后,过几秒又生成一...
  • Guid 唯一标识

    2013-10-24 22:43:44
    GUID(全球统一标识符),在一台设备上生成一串数字,保证了唯一性,生成算法用到的有以太网卡地址、芯片ID、纳秒级别时间等等一些可能数字。 在程序中用法(C#):  Guid guid = Guid.NewGuid(); ...
  • 怎样进行版权保护?...2、读取原芯片的程序(获取整个Flash数据),然后把整个数据放到新的芯片中去 当程序代码中加入ID号码的判断,就能起到保护的作用 STM芯片中加入了96位的ID (唯一),这个ID号主要作用...
  • C# Guid生成唯一标识符

    千次阅读 2013-08-21 10:31:53
    GUID(全球统一标识符),在一台设备上生成一串数字,保证了唯一性,生成算法用到的有以太网卡地址、芯片ID、纳秒级别时间等等一些可能数字。 在程序中用法(C#):  Guid guid = Guid.NewGuid(); String ...
  • 唯一编号算法:生成GUID

    千次阅读 2019-05-02 22:04:20
    过生成不重复编号想法吗?比如做一个自动保存网页图片工具,要保证保存图片不互相覆盖,一个想法是使用一个计数器从1开始递增,但是...它使用网卡MAC、地址、纳秒级时间、芯片ID码和许多可能数字,这样...
  • STM32实例源码剖析(ID获取加密)

    千次阅读 2019-06-12 22:48:29
    说明: 本文原创作者『Allen5G』 首发于微信公众号『Allen5G』 标签:嵌入式软件,算法,架构,进阶 ... * 说 明:每个芯片有唯一的 96_bit unique ID */ void Get_ChipID(void) { CPU_I...

空空如也

空空如也

1 2 3 4 5 6
收藏数 113
精华内容 45
关键字:

有唯一id的芯片