これがわからないのはばかげていますが、迷っています。 XOR 2つのC文字列を作成しようとしています。
#include <stdio.h>
#include <memory.h>
#include <stdlib.h>
int main()
{
char plainone[16];
char plaintwo[16];
char xor[17];
strcpy(plainone, "PlainOne");
strcpy(plaintwo, "PlainTwo");
int i=0;
for(i=0; i<strlen(plainone);i++)
xor[i] ^= (char)(plainone[i] ^ plaintwo[i]);
printf("PlainText One: %s\nPlainText Two: %s\n\none^two: %s\n", plainone, plaintwo, xor);
return 0;
}
私の出力は:
$ ./a.out
PlainText One: PlainOne
PlainText Two: PlainTwo
one^two:
Xor配列が何としても読み取られないのはなぜですか?
XORを処理すると、印刷できない可能性があるバイナリバイトを処理しますASCII文字。
そして、XOR互いに同じ文字である場合、0を取得します。したがって、_'P' ^ 'P'
_は0になります。これはNULバイトであり、文字列を終了します。印刷しようとすると、 printf()
では何も得られません; printf()
は文字列を終端された長さ0の文字列と見なします。
また、プログラムのように_=
_を使用するのではなく、単純にXOR結果を_^=
_を使用してターゲットバッファーに割り当てる必要があります。
ここにあなたのプログラムの私のバージョンと私の出力があります:
_#include <stdio.h>
#include <memory.h>
#include <stdlib.h>
#define LENGTH 16
int main()
{
char const plainone[LENGTH] = "PlainOne";
char const plaintwo[LENGTH] = "PlainTwo";
char xor[LENGTH];
int i;
for(i=0; i<LENGTH; ++i)
xor[i] = (char)(plainone[i] ^ plaintwo[i]);
printf("PlainText One: %s\nPlainText Two: %s\n\none^two: ", plainone, plaintwo);
for(i=0; i<LENGTH; ++i)
printf("%02X ", xor[i]);
printf("\n");
return 0;
}
_
出力:
_PlainText One: PlainOne
PlainText Two: PlainTwo
one^two: 00 00 00 00 00 1B 19 0A 00 00 00 00 00 00 00 00
_
Plain
はPlain
とXORされるため、最初の5バイトがすべて_00
_であることに注意してください。
まあ「プレーン」xor「プレーン」== 00000、0はターミネーター文字です。 C文字列はターミネータまで印刷されます。つまり、何も印刷されません。