当前位置:文档之家› 实验二(两种基本古典密码设计与实现)

实验二(两种基本古典密码设计与实现)


for(i=0;i<26;i++)
KeyTab[i]=(unsigned char)letter_to_digit(ChoiceWords[i]);
p=full_array2(25);
for(i=0;i<26;i++)
KeyTab[26+i]=p[i];
for(i=0;i<26;i++)
KeyTab[52+i]=(unsigned char)((7*i+3)%26);
putchar(d[key[(int)(((i-1)/16)*16+j)]]); if(i>=16*5) i=0; } if(i%16!=0) { for(j=i%16;j<16;j++)d[j]='*'; for(j=0;j<16;j++)
putchar(d[key[(int)((i/16)*16+j)]]);
char alphabet[26]={"abcdefghijklmnopqrstuvwxyz"}; for(i=0;i<26;i++)
if(tolower(c)==alphabet[i]) return(i); return(-1); } char digit_to_letter(int n) { // char alphabet[26]={'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'}; char alphabet[26]={"abcdefghijklmnopqrstuvwxyz"}; if(n<0||n>25) return(0); return(alphabet[n]); } unsigned char *KeyGen_s( ) { char KeyWords[106]; char ChoiceWords[26]; unsigned char *p; static unsigned char KeyTab[26*3]; int i,j,k,l; printf("\n 请输入密钥字:\n"); gets(KeyWords); strcat(KeyWords,"abcdefghijklmnopqrstuvwxyz"); k=0; l=strlen(KeyWords); ChoiceWords[k]=tolower(KeyWords[0]); for(i=1;i<l;i++) {
//by ouhw //代替密码 int letter_to_digit(char c) {
int i; // char alphabet[26]={'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'};
} //移位密码 unsigned char *KeyGen_p( ) {
unsigned char *p; static unsigned char KeyTab[16*5]; int i,j; for(i=0;i<5;i++) {
p=full_array2(15); for(j=0;j<16;j++) KeyTab[16*i+j]=p[j]; } return(KeyTab); } void Encrypt_p(unsigned char *key) { int i,j; FILE *fp; char filename[20],c; char d[16]; start: printf("\n 请输入待加密文本文件名:\n"); scanf("%s",filename); if( (fp=fopen(filename,"rt"))==NULL ) { printf("没有找到文件:%s\n",filename); goto start; } printf("\n 密文如下:\n"); i=0; while((c=fgetc(fp))!=EOF) { d[i%16]=c; i++; if(i%16!=0) continue; for(j=0;j<16;j++)
if(letter_to_digit(KeyWords[i])==-1) continue; ChoiceWords[++k]=tolower(KeyWords[i]); for(j=0;j<k;j++)
if(ChoiceWords[j]==ChoiceWords[k]) {
k--; break; } }
//公式选为 7*i+3(mod 26)
return(KeyTab);
}
void Encrypt_s(unsigned char *key)
{
inபைடு நூலகம் i;
FILE *fp;
char filename[20],c;
start: printf("\n 请输入待加密文本文件名:\n"); scanf("%s",filename); if( (fp=fopen(filename,"rt"))==NULL ) { printf("没有找到文件:%s\n",filename); goto start; } printf("\n 密文如下:\n"); i=0; while((c=fgetc(fp))!=EOF) { if(letter_to_digit(c)==-1) { putchar(c); continue; } isupper(c)? putchar(toupper(digit_to_letter(key[(int)((i/26)*26+letter_to_digit(c))]))): \ putchar(digit_to_letter(key[(int)((i/26)*26+letter_to_digit(c))])); i++; if(i>=26*3) i=0; } fclose(fp);
} putchar('\n'); fclose(fp); }
相关主题