64 位电子密钥






4.20/5 (3投票s)
本文演示了使用序列号 DS1990 来获得对应用程序的授权访问。
引言
在本文中,我将演示如何使用 Dallas Semiconductor 的 DS1990 序列号作为电子密钥来获得对应用程序的授权访问。这将是我的关于 1-Wire 技术的文章的延续,我在其中描述了温度测量 [1]。我最初的想法是修改 Windows 登录时使用的 gina.dll 库。但是,由于我认为这可能会给初学者带来很多问题,甚至可能锁定系统访问权限,我决定放弃它。尽管如此,对于高级用户,我建议阅读 [2],[3]。
为什么选择 DS1990?
图 1. DS1990 存储器映射 [4]
DS1990 是一个序列号 [4],包含一个唯一的 ROM 号(图 1)。该号码由一个 8 位 CRC 代码、一个 48 位序列号和一个 8 位族代码组成。世界上没有两个相同的 ROM 号。其他优点包括:工作寿命非常长,与移位器或其他身份卡相比价格便宜,序列号可以检查,因为它包含 CRC 代码,并且可以轻松地在 PC 和微控制器中实现。
安装
要使用此软件,您需要
- DS9097E 适配器,如 [1] 中所述(图 2)
- DS1990 序列密钥(图 3)
- iButton 探头 DS9092 或其等效产品 [5](图 4)
图 2. DS9097E 适配器 [1]
图 3. DS1990 序列密钥
图 4. iButton 探头
使用代码
#include <conio.h>
#include <stdio.h>
#include "onewire.h"
void main(int argc, char **argv)
{
short* ROM = new short[8];
COneWire key("IBFS32.DLL",OW_ADAPTER_DS9097E,1);
short data[] = {'a','b','c','1','2','3'};
if(!key.StartSession())
{
printf("%s\n",ErrorDescr(key.GetLastError()));
exit(-1);
}
printf("Ready to read...\n");
while(!_kbhit())
{
if(key.FindDevices() == 1)
{
key.GetRomCode(0,ROM);
for(int i=0;i<8;i++)
printf("%2X ",ROM[i]);
printf("\n");
}
Sleep(10);
}
delete[] ROM;
key.EndSession();
}
在一个循环中,我正在检查电子密钥是否接触到探头。如果是,我读取 ROM 并打印它。
结论
DS1990 序列号有无限的应用。我希望您能有自己的应用。最后,您必须意识到有些人已经创建了 DS1990 序列号的模拟器,但不用担心:只要窃贼不知道您的密钥号码,您就是安全的。此外,如果您丢失了传统的密钥,任何人都可以复制它。