强密码生成器
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); //黄灯亮指示正在生成密码