两个端(如APP端与单片机端),以时间为加密起点,通过相同算法方式得到相同结果,用于校验输入端的密码是否正确。加密算法简易,可以再优化。
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
void Tnumber(int *a){//加密
for(int i=0; i<6; i++){//每位的数字规则改变
a[i]=(a[i]+a[5]%10+a[4]%10)%10;
}
for (int i=0,T1; i<3; i++) {//位置互换
T1=a[i];
a[i]=a[abs(a[4]-i)%5];
a[abs(a[4]-i)%5] = T1;
}
}
int main(int argc, const char * argv[]) {
while(1){
time_t timep;
struct tm *p;
time (&timep);
p=gmtime(&timep);
printf("%d日 ",p->tm_mday);/*获取当前月份日数,范围是1-31*/
printf("%d时 ",8+p->tm_hour);/*获取当前时,这里获取西方的时间,刚好相差八个小时*/
printf("%d分 ",p->tm_min); /*获取当前分*/
printf("\n");
printf("\n");
int a[6]={p->tm_mday/10,p->tm_mday%10,(8+p->tm_hour)/10,(8+p->tm_hour)%10,(p->tm_min)/10,(p->tm_min)%10}; //当前时间产生原密码
printf("时间加密之前:\n");
for (int i=0; i<6; i++) {
printf("%d ",a[i]);
}
Tnumber(a);
printf("\n时间加密之后:\n");
for (int i=0; i<6; i++) {
printf("%d ",a[i]);
}
printf("\n\n");
int iup[6], iupNumber,statue=1;
printf("请输入密码:\n");
scanf("%d",&iupNumber);
iup[0]=iupNumber/100000;
iup[1]=iupNumber/10000%10;
iup[2]=iupNumber/1000%10;
iup[3]=iupNumber/100%10;
iup[4]=iupNumber/10%10;
iup[5]=iupNumber%10;
printf("输入的密码:\n");
for (int i=0; i<6; i++) {
printf("%d ",iup[i]);
}
for (int i=0; i<6; i++) {
if(a[i]!=iup[i]){
printf("\n密码错误…………\n");
statue = 0;
break;
}
}
if(statue==1){
printf("\n密码正确…………\n");
}
printf("\n\n\n\n");
}
return 0;
}