我有一個可怕的時間瞭解如何讓包裝使用這些加密程序。我得到了一個凱撒密碼程序來加密和解密,現在我正在使用Vigenere密碼。我有程序工作,但是當我使用一個會導致字母環繞的鍵時,我會得到奇怪的結果。這裏是我使用的代碼:包裝操作問題
int main(int argc, char *argv[])
{
char s2[25];
strcpy(s2, argv[1]);
printf("Please enter a string of text to be encrypted!\n");
string p = GetString();
for (int i = 0, n = strlen(p); i < n; i++)
{
if (isupper(p[i])){
char c = (p[i] - 'A' + s2[i]);
printf("%c", c);
}
}
printf("\n");
}
如果在命令行中輸入./program BACON
,我進入BLAH文本進行加密此代碼將工作。例如,如果我使用./program ZZZZZ
作爲關鍵,那麼我會得到各種奇怪的結果,因爲它不會迴繞。我試過使用模運算符,並且將它從我剛剛發佈的代碼中刪除,因爲我仍然無法使用它來包裝它。我剛開始學習編程,所以如果有人能夠詳細解釋我做錯了什麼,我將不勝感激。由於
也許你能幫助我理解數學更好的代碼工作完美,但我一直在試圖弄清楚這一點上一個計算器手動只是爲了看看怎麼回事。這是我到目前爲止有:
./program HHHHH
KEYLEN應該在我的理解等於5,所以如果我給P [I]「H」的值
keyLen= 5
p[i]= H //or 72 in ASCII
int sum = (p[i] - 'A') + (s2[i % keyLen] - 'A'); //sum = (72 - '65') + ([72 % 5] - '65');
char c = 'A' + sum%26; // c = 65 + -11
也許我的數學很遙遠因爲當我按照順序做事情時,我認爲他們應該做sum = negative 63,所以26 mod是-63,這會給我帶來負11.這顯然是不對的,因爲當你加65和負11時,它等於54。如果我將11作爲正整數並加上65,我得到76是ASCII字符「L」,但正確答案是「O」。我顯然做錯了,但我一直在解決方案一段時間,並繼續得出相同的結果....
當你調試你的代碼時你發現了什麼? –
如果(例如)s2是5個字符長,'i'是10,那麼's2 [i]'會是什麼? –