资料详情

强密码生成器实例

头像

理工论文

编号:11511

强密码生成器

1、总电路图

2、模块介绍

(1)RFID读卡器模块相关代码:

byte v = mfrc522.PCD_ReadRegister(mfrc522.VersionReg);

if (v == 0x91 || v == 0x92)

digitalWrite(GREEN, HIGH);

else

digitalWrite(RED, HIGH);

……

// 新卡片出现之后再继续执行

if ( ! mfrc522.PICC_IsNewCardPresent()) {

return;

}

// 读取到卡片序列号之后再执行

if ( ! mfrc522.PICC_ReadCardSerial()) {

return;

}

(2)密码生成及输出模块相关代码:

void PrintPassword() {

unsigned char* hash = MD5::make_hash((char*)mfrc522.uid.uidByte);

//使用 MD5 算法对卡片 UID 生成摘要

char *pwd = (char *) malloc (sizeof(char) * 17);//存放密码的字符串

static const char trans[95] = //转义数组

"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890[];',./{}:\"<>?\\|=-+_)(*&^%$#@!~`";

for (int i = 0; i != 16; ++i)

pwd [i] = trans[*(hash + i) % 94];//将 MD5 摘要的转换为强密码字符串

pwd [16] = '\0'; //防止极端条件下的异常

Keyboard.print(pwd); //打印密码

free(hash); //避免内存泄漏

free(pwd);

}

(3)用户提醒模块相关代码:

//指示初始化是否正常,读取 RFID 读卡器的版本号。

//在连接异常时返回的版本号不正确,通过红绿 LED 指示工作状态。

byte v = mfrc522.PCD_ReadRegister(mfrc522.VersionReg);

if (v == 0x91 || v == 0x92)

digitalWrite(GREEN, HIGH);

else

digitalWrite(RED, HIGH);

……

digitalWrite(WHITE, HIGH); //黄灯亮指示正在生成密码