动态口令是软件通过系统时间及动态口令的序列号等通过一定的算法生成的
见你这个分类是C/C++分区应当是要编写一个程序来仿真一下,下面即是结果:
#include
#include
#include
class DateTime
{
public:
int year,month,day,hour,minute,second;
public:
void ShowTime()
{
printf("当前时间:%d年%d月%d日%d:%d:%d\n", year, month, day,hour,minute,second);
}
int GetPassWord(int keyId)//这里的keyId表示令牌的序列号
{
//令牌由于是30秒变一次,所以是用second/30,这里为了简便起见,我们改30为5
int var=((second/30+1)*123457+minute*334+hour*12+month*8+year*34+keyId)%1000000;//通过一系列的运算得到6位校验码
if(var<100000)
var*=10;
return var;
}
};
void main()
{
time_t nowtime;
struct tm *timeinfo;
int keyId=123214;//令牌的序列号
while(true)
{
time( &nowtime );
timeinfo = localtime( &nowtime );
DateTime dt;
dt.year = timeinfo->tm_year + 1900;
dt.month = timeinfo->tm_mon + 1;
dt.day = timeinfo->tm_mday;
dt.hour=timeinfo->tm_hour;
dt.minute=timeinfo->tm_min;
dt.second=timeinfo->tm_sec;
dt.ShowTime();
printf("令牌序列号为:%d\n",keyId);
printf("令牌的号码为:%d\n",dt.GetPassWord(keyId));
Sleep(1000);
system("cls");
}
}