加密芯片SMEC98SP的使用方法

2025-10-06 18:50:05

1、读取加密芯片ID号,这个ID号可用来做唯一ID身份识别,可以设计到加密方案中。

代码如下:

unsigned char Read_UID(unsigned char * UID)

{

uchar ret;

uchar iic_addr;

uchar len;

iic_addr = 0x00;

iic_buff[0] = 0x83;

iic_buff[1] = 0x00;

iic_buff[2] = 0x00;

iic_buff[3] = 0x0c; //一共是0x0c个字节

len = iic_buff[3];

ret = IIC_WriteWithAddr(iic_addr & 0xFE, iic_buff, 4);

if(ret)//出错

{

return 1;

}

// delay_nms(1);

ret = IIC_ReadWithAddr(iic_addr | 0x1, UID, (len+2));

if(ret)

{

return 1;

}

return 0; //读取成功

}

2、读取随机数,随机数是参与密码运算的重要过程数据,每次都不一样的数据传输,破解者无法获得规律。

//读8字节随机数,返回:90 00 data1 data2.....data8

unsigned char Read_random(unsigned char *random)

{

uchar ret;

uchar iic_addr;

uchar len;

iic_addr = 0x00;

iic_buff[0] = 0x84;

iic_buff[1] = 0x00;

iic_buff[2] = 0x00;

iic_buff[3] = 0x08; //一共是0x08个字节

len = iic_buff[3];

ret = IIC_WriteWithAddr(iic_addr & 0xFE, iic_buff, 4);

if(ret)//出错

{

return 1;

}

// delay_nms(5);

ret = IIC_ReadWithAddr(iic_addr | 0x1, random, (len+2));

if(ret)

{

return 1;

}

return 0; //读取成功

}

3、密码认证,密文传输。

unsigned char PIN_authentication(unsigned char *ret_data)

{

uchar ret;

uchar iic_addr;

iic_addr = 0x00;

iic_buff[0] = 0x70;

iic_buff[1] = 0x00;

iic_buff[2] = 0x00;

iic_buff[3] = 0x08; //

memcpy(&iic_buff[4],PinKey,8);

ret = IIC_WriteWithAddr(iic_addr & 0xFE, iic_buff, 4+8);

if(ret)//出错

{

return 1;

}

// delay_nms(5);

ret = IIC_ReadWithAddr(iic_addr | 0x1, ret_data, 2);

if(ret)

{

return 1;

}

return 0; //读取成功

}

4、添加一个算法

unsigned char circumference(unsigned char radius, unsigned char *ret_data)

{

uchar ret;

uchar iic_addr;

iic_addr = 0x00;

iic_buff[0] = 0x72;

iic_buff[1] = 0x00;

iic_buff[2] = 0x00;

iic_buff[3] = 1; //

iic_buff[4] = radius;

ret = IIC_WriteWithAddr(iic_addr & 0xFE, iic_buff, 4+1);

if(ret)//出错

{

return 1;

}

// delay_nms(5);

ret = IIC_ReadWithAddr(iic_addr | 0x1, ret_data, 3);

if(ret)

{

return 1;

}

return 0; //读取成功

}

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢