// S/KEY 协议简单模拟
// Written by 多维数组
// 2014.4
#define MAX_LEN (500)
#define LEN (10)
#include <stdio.h>
#include <stdlib.h>
int UserKey[MAX_LEN],
ServerKey=0;
int Hash(int);
int main()
{
int i;
printf("InitKey: ");
scanf("%d", &(UserKey[0]));
//Generation
for(i=1; i<=LEN+1; ++i)
UserKey[i]=Hash(UserKey[i-1]);
ServerKey=UserKey[LEN+1];
UserKey[0]=UserKey[LEN+1]=0;
printf("UserKey:");
for(i=1; i<=LEN; ++i)
printf(" %d", UserKey[i]);
printf("\nServerKey: %d\n\n", ServerKey);
//Authentication
for(i=LEN; i>=1; --i)
{
if(Hash(UserKey[i])==ServerKey)
{
printf("Succeed! Hash(%d)=%d\n", UserKey[i], ServerKey);
ServerKey=UserKey[i];
} else {
printf("Fail!\n");
}
}
return 0;
}
int Hash(int s)
{
srand(s);
return rand();
}