C++第四次上機作業(異或加密)


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

上面這個代碼首先通過main函數的參數*args[]讀入key,利用(i++)%len實現對key各個字符的循環操作。利用cin.get( )依次讀入各個字符,并與key中的字符進行異或運算,得到加密的字符。由于異或運算的可逆性,即 a==(a^b)^b ,可以恢復得到原文。在調試過程中發現,加密會得到一個ASCII碼編號為26的字符,然后在解密的時候,若讀入這個編碼為26的字符,程序就會終止。所以第一個想法就是忽略所有非打印字符,在編碼時,若所得密碼為非打印字符,則不進行加密,輸出原文。但是受到了老師的否認。于是再作修改,經實驗發現,只有編碼為26的字符會出現這種奇怪的情況,因此決定將這個字符定義成編碼為27的字符,如’u’^’o’會產生26的字符,就把這個字符改成27,結果最后出現原來應該是’o’的,解密得到了’n’,但是沒有其他更好的辦法了,總會有點誤差的嘛。
以下為修改后的代碼

























