65.9K
CodeProject 正在变化。 阅读更多。
Home

64 位电子密钥

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.20/5 (3投票s)

2009 年 4 月 20 日

CPOL

2分钟阅读

viewsIcon

41024

downloadIcon

352

本文演示了使用序列号 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 和微控制器中实现。

安装

要使用此软件,您需要

  1. DS9097E 适配器,如 [1] 中所述(图 2)
  2. DS1990 序列密钥(图 3)
  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 序列号的模拟器,但不用担心:只要窃贼不知道您的密钥号码,您就是安全的。此外,如果您丢失了传统的密钥,任何人都可以复制它。

参考文献

  1. 温度测量作为 1-Wire 技术应用示例
  2. 使用移动磁盘的 Winlogon
  3. 自定义 GINA,第 1 部分
  4. DS1990 文档
  5. Demiurg - DS9092 探头的等效产品制造商
© . All rights reserved.