2013-04-30 58 views
3

我是新來的c和我正在寫一個程序,將加密文本文件與Caesar cipher。每當我運行它只是將字母轉換爲SOH字符。凱撒加密程序不會產生預期的密文

encryption.c

char *lowerAlpha= "abcdefghijklmnopqrstuvxxyz"; 
char *upperAlpha= "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; 

int encrypt(int c, int amount) 
{ 
    char* alpha; 
    int retVal = c; 
    int i; 

    if(isalpha(c)) 
    { 
     if(islower(c)) 
     { 
      alpha = lowerAlpha; 
      i = (c - 'a' - amount) % 26; 
      retVal = alpha[i]; 

     } 
     else if(isupper(c)) 
     { 
      alpha = upperAlpha; 
      i = (c -'A' - amount) % 13; 
      retVal = alpha[i]; 
     } 
    } 
    return retVal; 
} 

,並在另一個文件在我的主要方法是我用

encryptFile(inputfile, outputfile, 13); 
+0

您忘記說「quote-unquote encryption」 – 2013-04-30 18:23:40

+0

'while((c = fgetc(inputF))!= EOF)' – 2013-04-30 18:25:16

+0

'%13'的建議括號?真? 13? – 2013-04-30 18:26:48

回答

0

你減去'A''a'加密過程中字符值轉移到0 .. 25範圍,你永遠不會再添加任何東西來將它們變成字母。

+0

不會retVal =阿爾法[我]得到新的字符基於移位值由13模式? – user2337029 2013-04-30 18:25:24

+2

@ user2337029技術上,是的。但是,「字符」很可能超出可打印的ASCII字符範圍。問問你自己 - 如果我在看到'c''a' - amount'時使用字符'a',結果如何(我認爲在你的具體情況下爲'-13')。當給出負數時,確保你理解C用'%'操作符做的事情 - 它可能不是你所期望的。當轉換爲8位無符號字符時,'-13'將會是243 - 在ASCII範圍之外,但是如果您的字符集是ISO-8859或其他東西,可能會顯示某些內容... – twalberg 2013-04-30 19:11:44

+0

感謝您指出這一點,我意識到我的加密算法錯了,它應該是c - 'a'+數量 – user2337029 2013-04-30 19:33:57