突发奇想,自己做一个加密芯片,用51单片机做i2c从设备
2013-06-13 12:13
337 查看
具体代码:http://download.csdn.net/detail/dragon101788/5720453(20130708更新)
http://download.csdn.net/detail/dragon101788/5571493(旧代码)
研究i2c有一段时间了,这一次自己做了个加密芯片,硬件环境如要使用stc12c5a60s2单片机作为从设备,主设备使用ralink rt5350与6410测试通过。
主设备中使用标准i2c协议,也可以使用gpio模拟,不过通过测试stc12c5a60s2中如果i2c脉冲在10us的情况下从设备不是很稳定,我使用的脉冲为100us,相当稳定
主设备gpio模拟i2c请参阅:/article/2720731.html
加密部分我自己写的哈希算法,能够实现64位的哈希加密,主机先给从机发送8个字节的随机码,从机通过hash算法与key校验之后的数据再读出来与主机进行对比。
上位机加密部分代码为:
http://download.csdn.net/detail/dragon101788/5571493(旧代码)
研究i2c有一段时间了,这一次自己做了个加密芯片,硬件环境如要使用stc12c5a60s2单片机作为从设备,主设备使用ralink rt5350与6410测试通过。
主设备中使用标准i2c协议,也可以使用gpio模拟,不过通过测试stc12c5a60s2中如果i2c脉冲在10us的情况下从设备不是很稳定,我使用的脉冲为100us,相当稳定
主设备gpio模拟i2c请参阅:/article/2720731.html
加密部分我自己写的哈希算法,能够实现64位的哈希加密,主机先给从机发送8个字节的随机码,从机通过hash算法与key校验之后的数据再读出来与主机进行对比。
上位机加密部分代码为:
unsigned char secret_key[8]={'1','9','8','8','1','0','1','7'};//为固定的key码,与下位机相同 unsigned char random[8]={0};//随机码 void RSHash()//具体hash加密算法 { char i; unsigned char a=0; unsigned char hash=0; for(i = 0; i < 8; i++) { a = random[i]+hash; hash += a; random[i]=secret_key[hash%8]*hash; } }
int exmcu_verify()//与下位机通讯校验部分 { int ret; int i=0; //linux内核过去随机数 get_random_bytes(random,8); //写入随机码 gpio_i2c_write(0x17,0x51,random[0]); udelay(500); gpio_i2c_write(0x17,0x52,random[1]); udelay(500); gpio_i2c_write(0x17,0x53,random[2]); udelay(500); gpio_i2c_write(0x17,0x54,random[3]); udelay(500); gpio_i2c_write(0x17,0x55,random[4]); udelay(500); gpio_i2c_write(0x17,0x56,random[5]); udelay(500); gpio_i2c_write(0x17,0x57,random[6]); udelay(500); gpio_i2c_write(0x17,0x58,random[7]); udelay(500); gpio_i2c_write(0x17,0x50,1); mdelay(100); //上位机计算hash结果 RSHash(); ret = 0; for(i=0;i<8;i++) {//读取下位机hash结果 if(gpio_i2c_read(0x17,0x51+i)!=random[i]) ret = -1; //printk("%x=%x\r\n",i,random[i]); udelay(500); } //返回校验结果 return ret; // ret = gpio_i2c_read(0x17,0x51); // printk("0x51=%x\r\n",ret); // ret = gpio_i2c_read(0x17,0x52); // printk("0x52=%x\r\n",ret); // ret = gpio_i2c_read(0x17,0x53); // printk("0x53=%x\r\n",ret); // ret = gpio_i2c_read(0x17,0x54); // printk("0x54=%x\r\n",ret); // ret = gpio_i2c_read(0x17,0x55); // printk("0x55=%x\r\n",ret); // ret = gpio_i2c_read(0x17,0x56); // printk("0x56=%x\r\n",ret); // ret = gpio_i2c_read(0x17,0x57); // printk("0x57=%x\r\n",ret); // ret = gpio_i2c_read(0x17,0x58); // printk("0x58=%x\r\n",ret); }
相关文章推荐
- 选一个适合自己的加密芯片,加密IC,如何才能真正的做到不被破解。
- Linux i2c子系统(一) _动手写一个i2c设备驱动
- 51单片机自己动手写一个printf函数
- 管理的网路设备较多,今天借助SNMP++ 编写了一个SNMP的COM控件,可以用VBS脚本批量查自己想要的数据了
- 如何实例化一个i2c设备(struct i2c_client)
- I2C与SCCB协议一个小小的区别(解释了ov9650从设备号为什么是30)
- Linux I2C 几个结构体间的关系以及对于一个I2C设备的移植,我们需要做些什么工作
- 使用I2C操作AT88加密芯片
- 加密芯片提升消费电子产品设备的安全性能
- Linux设备驱动程序架构分析之一个I2C驱动实例
- 自己写了一个文件加密解密工具
- LKT4102 8位I2C接口防盗版加密芯片
- i2c 驱动三:自己实现设备和驱动分离
- camera实现一个image 自适应几十个camera ----- i2c 设备 unregister 过程
- 一个51单片机比较综合的程序(包括了串口通信,io控制,字符串处理,中断处理),仅供自己以后参考
- 最近在忙着做一个加密的项目,还自己找的私活.
- 浅谈智能卡加密芯片在智能设备领域的技术运用
- LKT4102 8位I2C接口防盗版加密芯片
- 69 linux i2c设备驱动之ft5306电容触控芯片驱动
- LKT4102 8位I2C接口防盗版加密芯片