è¿éææ¹æ³ï¼èªå·±çå§ï¼æ¯è¾å¤ï¼åµåµ
[å¯æä»ç»]
å¯æå¯ç ï¼kaiserï¼æ¯ç½é©¬æ©å¼ æ¶ææ±å©æ¯"å¯æï¼Julius Caesarï¼åé çï¼ç¨äºå å¯éè¿ä¿¡ä½¿ä¼ éçä½æå½ä»¤ãå®å°åæ¯è¡¨ä¸çåæ¯ç§»å¨ä¸å®ä½ç½®èå®ç°å å¯ã
[å å¯åç]
å¯æå¯ç çå å¯ç®æ³æå
¶ç®åãå
¶å å¯è¿ç¨å¦ä¸ï¼
å¨è¿éï¼æ们åæ¤çº¦å®ï¼ææ记为mï¼å¯æ记为cï¼å å¯åæ¢è®°ä¸ºE(k1,m)ï¼å
¶ä¸k1为å¯é¥ï¼ï¼è§£å¯åæ¢è®°ä¸ºD(k2,m)ï¼k2为解å¯å¯é¥ï¼ï¼å¨è¿ék1=k2,ä¸å¦¨è®°ä¸ºkï¼ãå¯æå¯ç çå å¯è¿ç¨å¯è®°ä¸ºå¦ä¸ä¸ä¸ªåæ¢ï¼
câ¡m+k mod n ï¼å
¶ä¸n为åºæ¬å符个æ°ï¼
åæ ·ï¼è§£å¯è¿ç¨å¯è¡¨ç¤ºä¸ºï¼
mâ¡c+k mod n ï¼å
¶ä¸n为åºæ¬å符个æ°ï¼
对äºè®¡ç®æºèè¨ï¼nå¯å256æ128ï¼mãkãcå为ä¸ä¸ª8bitçäºè¿å¶æ°ãæ¾ç¶ï¼è¿ç§å å¯ç®æ³æä¸å®å
¨ï¼å³ä½¿éç¨ç©·ä¸¾æ³ï¼æå¤ä¹åªè¦255次å³å¯ç ´è¯ãå½ç¶ï¼ç©¶å
¶æ¬èº«èè¨ï¼ä»ç¶æ¯ä¸ä¸ªå表置æ¢ï¼å æ¤ï¼é¢çåææ³å¯¹å
¶ä»æ¯ææçã
[å å¯ç®æ³]
æ们é¢å®ä¹åºæ¬å符个æ°ä¸º #define MAX 128
å¯æå å¯å½æ°å¯ä»¥è¡¨ç¤ºä¸º
[Copy to clipboard]
CODE:
char cipher(char plain_char, int key)
{
return (plain_char + key) % MAX;
};
å¯æ解å¯å½æ°ï¼
[Copy to clipboard]
CODE:
char decipher(char cipher_char, int key)
{
return (cipher_char - key + MAX) % MAX;
};
å å¯åï¼åææçASCIIç å移keyä½ï¼è§£å¯å移åkeyä½ã
å¦æè¦å¯¹ä¸ä¸ªææ¬æ件è¿è¡å å¯ï¼ååªè¦ä¾æ¬¡é个å符é个å符å°è¯»åææ¬æ件ï¼è¿è¡å å¯åï¼é个å符é个å符åå
¥å¯æææ¬æ件ä¸ï¼å³å¯ï¼
[Copy to clipboard]
CODE:
FILE *fp_plaintext;
FILE *fp_ciphertext;
char plain_char;
... ...
while((plain_char=fgetc(fp_plaintext))!=EOF)
{
fputc(cipher(plain_char,key),fp_ciphertext);
}
对æ件ç解å¯ä¹åæ ·æ¹æ³ã
[ç ´è§£åç]
ä¸ç¯å
å«å符çè±ææç« ï¼å
¶åASCIIç å符åºç°ï¼é½æä¸å®çé¢çï¼ä¸é¢æ¯å¯¹Googleä¸éææç´¢å°çè±ææç« è¿è¡åæçç»æï¼è§è¡¨ï¼
QUOTE:
=================================================
FileName : 01.txt
[1] 32: times:204
[2] 101:e times:134
[3] 116:t times:91
[4] 105:i times:87
[5] 111:o times:77
[6] 108:l times:75
[7] 97:a times:75
[8] 110:n times:69
[9] 10:
times:67
[10] 115:s times:63
=================================================
FileName : php.si.source.txt
[1] 32: times:576
[2] 101:e times:162
[3] 115:s times:153
[4] 110:n times:141
[5] 114:r times:138
[6] 105:i times:135
[7] 10:
times:134
[8] 116:t times:129
[9] 42:* times:116
[10] 111:o times:103
=================================================
FileName : work.txt
[1] 32: times:51322
[2] 101:e times:30657
[3] 116:t times:23685
[4] 97:a times:19038
[5] 111:o times:17886
[6] 105:i times:16156
[7] 110:n times:15633
[8] 114:r times:15317
[9] 115:s times:15226
[10] 104:h times:12191
=================================================
FileName : 02.txt
[1] 32: times:299
[2] 101:e times:217
[3] 110:n times:136
[4] 105:i times:133
[5] 111:o times:124
[6] 116:t times:116
[7] 97:a times:110
[8] 115:s times:98
[9] 114:r times:92
[10] 108:l times:82
=================================================
FileName : 03.txt
[1] 45:- times:404
[2] 32: times:394
[3] 101:e times:237
[4] 116:t times:196
[5] 114:r times:173
[6] 97:a times:163
[7] 105:i times:161
[8] 110:n times:153
[9] 111:o times:142
[10] 115:s times:129
=================================================
FileName : 04.txt
[1] 32: times:326
[2] 101:e times:179
[3] 116:t times:106
[4] 105:i times:101
[5] 111:o times:96
[6] 110:n times:94
[7] 97:a times:92
[8] 115:s times:78
[9] 100:d times:61
[10] 114:r times:60
=================================================
FileName : 05.txt
[1] 32: times:441
[2] 101:e times:191
[3] 111:o times:151
[4] 116:t times:120
[5] 97:a times:112
[6] 110:n times:108
[7] 105:i times:91
[8] 114:r times:84
[9] 117:u times:79
[10] 115:s times:79
ææ¤åæå¯ç¥ï¼ä¸ç¯è±ææç« ä¸ï¼åºç°è¾é«é¢çç两个åç¬¦æ¯ ' ' (ç©ºæ ¼) å 'e'ï¼èä¸å®ä»¬çASCIIç åå«æ¯32å101ï¼å·®å¼æ¯69ã
æ¢ç¶å¯æå¯ç å©ç¨çæ¯å表æ¿æ¢çä¸ç§ç®åå å¯ç®æ³ï¼æ以ï¼æ们ç主è§ï¼ ' ' å 'e' ï¼å¨è§£å¯åï¼ä¾ç¶ä¼ä¿æç¸åçASCIIç å·®å¼ï¼69ã
|c1 - c2| = |'e' - ' '| = |101 - 32| = 69
|m1 - m2| = | ((c1 + k) mod 256)-((c2 + k) mod 256)| = |c1 - c2| = |'e' - ' '| = 69
ç°å¨å¯ä»¥å¾å°ç ´è§£å¯æå¯ç çåçäºï¼æ们ç»è®¡ä¸çç»è¿å¯æå å¯çå¯æå符信æ¯ï¼å¨åºç°é¢çè¾é«çå符éé¢å¯»æ¾å·®å¼æ¯69ç2个å符ï¼è¿ä¸¤ä¸ªå¿
å®æ¯ ' ' å 'e' å符çå å¯å符ï¼è®¡ç®å移éï¼æ¢å¯é¥keyï¼ï¼éè¿è§£å¯è¿ç®ï¼è¿ååºææã
[ç ´è§£ç®æ³]
ä»»ä½ä¸çè±æå å¯åçå¯æï¼æ们ç»è®¡åºææå符ç个æ°ï¼
[Copy to clipboard]
CODE:
#define MAX 128
... ...
FILE *fp_ciphertext;
char cipher_char;
int i; //å¯ææ件é¿åº¦ï¼å
å«å¤å°å符
unsigned int size_file=0; //ç³ænumæ°ç»ï¼åå¨å个ASCIIå符å¨å¯æä¸åºç°ç个æ°
num[MAX];
... ...
for(i = 0;i < MAX; i++) //åå§ånumæ°ç»ä¸çå¼
num[i] = 0;
... ...
while((cipher_char=fgetc(fp_ciphertext))!=EOF)
{
num[cipher_char]++;
size_file++;
}
ç»è®¡åºç°æå¤æ¬¡æ°çå符ï¼å®ä¹#define GETTOP 10ï¼ç»è®¡æå¤çå10ä½å符ï¼
[Copy to clipboard]
CODE:
//ç»è®¡å10ä½
#define GETTOP 10
... ...
int temp,i,j;
int maxascii[GETNUM]; //ç³æmaxasciiæ°ç»ï¼åå¨ç»è®¡åºçæ¦çå10ä½çå符asciiç
int maxtimes[GETNUM]; //ç³æmaxtimesæ°ç»ï¼åå¨ç»è®¡åºçæ¦çå10ä½çå符çåºç°æ¬¡æ°
... ...
for(i=0;i<GETTOP;i++)
{
temp=0; //临æ¶åétempéé¢æ¥åå¨åºç°æå¤æ¬¡æ°çå符çasciiç
for(j=1;j<MAX;j++) //ä¾æ¬¡æ¯è¾ææçå符次æ°ï¼è·å¾æå¤å符çasciiç
{
if(num[j]>=num[temp])
temp=j;
}
maxascii[i]=temp; //æåºç°æå¤æ¬¡æ°å符çasciiåå¨å°ç¸åºçmaxasciiæ°ç»ä¸
maxtimes[i]=num[temp]; //ææå¤æ¬¡æ°å符çåºç°æ¬¡æ°åå¨å°ç¸åºçmaxtimesæ°ç»ä¸
num[temp]=0; //ææå¤æ¬¡æ°å符ç次æ°èµå¼æ0ï¼
//è¿è¡å¾ªç¯è¿ç®ï¼åæ ·çç®æ³ï¼ç¬¬äºæ¬¡å¾ªç¯å¾å°çå¼ï¼è¯å®æ¯åºç°ç¬¬äºå¤çå符
//é¿å
äºå¯¹256æ128个å符è¿è¡æåºçå¤æè¿ç®
//å½å¹´æç¨æ±ç¼ç¼åæ绩æåºçç¨åºæ¶ï¼ä¹ç¨è¿å¥æåºç®æ³:-)
}
æ¾åºåºç°æå¤å符ä¸ï¼ASCIIç å·®å«æ¯69ç两个å符ï¼è®¡ç®åºå¯é¥keyçé¿åº¦ï¼
[Copy to clipboard]
CODE:
for(i=0;i<GETTOP;i++)
{
for(j=0;j<GETTOP;j++)
{
if((max[i]-max[j])==69)
{
key=(max[j] - 32 + MAX ) % MAX;
printf("Key : %d\n",key);
break;
}
}
}
æ¢ç¶å¾å°äºå¯é¥é¿åº¦ï¼ç®å®æäºå¯¹å¯æå¯ç çç ´è§£äºï¼é£å°±è¿è¡è§£å¯å§ï¼å¤§ååæï¼
温馨提示:答案为网友推荐,仅供参考