0

すでに暗号化されているファイルを XOR しようとしています。
XOR キーが 0x14 または dec(20) であることはわかっています。

私のコードは、1 つのことを除いて機能します。すべての「4」がなくなりました。

XORの私の関数は次のとおりです。

void xor(string &nString)    // Time to undo what we did from above :D
{
   const int KEY = 0x14;
   int strLen = (nString.length());
   char *cString = (char*)(nString.c_str());

   for (int i = 0; i < strLen; i++)
   {
    *(cString+i) = (*(cString+i) ^ KEY);
   }
}

これが私のメインの一部です:

ifstream inFile;
inFile.open("ExpTable.bin");
if (!inFile) {
    cout << "Unable to open file";
}

string data;                                 

while (inFile >> data) {
    xor(data);
    cout << data << endl;
}

inFile.close();

暗号化されたファイルの一部を次に示します。

$y{bq      //0 move
%c|{       //1 who
&c|qfq     //2 where 
'saufp     //3 guard
 x{wu`}{z  //4 location

しかしx{wu}{z` は //location を返しています。4 が表示されていません
。X の前のスペースに注意してください。4 にデコードされるはずです。

私は何が欠けていますか?4つすべてが表示されないのはなぜですか?<space> = 4 // 4 = <space>


アップデート

これは、すべての特定の変換のリストです。

HEX(enc) ASCII(dec)
20       4                  
21       5                  
22       6                  
23       7                  
24       0                  
25       1                  
26       2                  
27       3                  
28       <                  
29       =                  
2a       >                  
2b       ?                  
2c       8                  
2d       9                  
2e       :                  
2f       ;                  
30       $
31       %
32       &
33       '
34       
35       !
36       "
37       #
38       ,
39       -
3a       .
3b       /
3c       (
3d       )
3e       *
3f       +
40       T
41       U
42       V
43       W
44       P
45       Q
46       R
47       S
48       \
49       ]
4a       ^
4b       _
4c       X
4d       Y
4e       Z
4f       [
50       D
51       E
52       F
53       G
54       @
55       A
56       B
57       C
58       L
59       M
5a       N
5b       O
5c       H
5d       I
5e       J
5f       K
60       t
61       u
62       v
63       w
64       p
65       q
66       r
67       s
68       |
69       }
6a       
6b       
6c       x
6d       y
6e       z
6f       {
70       d
71       e
72       f
73       g

75       a
76       b
77       c
78       l
79       m
7a       n
7b       o
7c       h
7d       i
7e       j
7f       k
1d       /tab
1e       /newline
4

2 に答える 2

1
  1. すべてのキャストを取り除きます。
  2. 入力には使用しないでください>>

これで問題が解決するはずです。

編集:

// got bored, wrote some (untested) code
ifstream inFile;
inFile.open("ExpTable.bin", in | binary);
if (!inFile) {
    cerr << "Unable to open ExpTable.bin: " << strerror(errno) << "\n";
    exit(EXIT_FAILURE);
}

char c;
while (inFile.get(c)) {
    cout.put(c ^ '\x14');
}

inFile.close();
于 2012-12-01T01:49:41.087 に答える