次の機能を実装したい:
- 擬似乱数ジェネレーターとして Mersenne-Twister-Algorithm (ウィキペディアから) を使用しています。
- ストリーム暗号です
- 疑似コードは次のとおりです。encrypted text = CLEARTEXT XOR STREAM; 「ストリーム」は PSEUDORANDOM_NUMBER XOR KEY として定義されます
次の関数を書きました。
int encrypt(char clear[1000], char key[100], int lk/*length of the cleatext*/, int ls /*length of key*/) {
int a, i;
unsigned char result[1000];
char string[1000];
for (i = 0; i <= lk; i++) {
if (i+1-ls >= 0) { /*if the key is too short*/
a = mersenne_twister();
string[i]=key[i+1-ls]^a; /*XOR */
} else {
a=mersenne_twister();
string[i] = key[i]^a; /*XOR */
}
result[i] = clear[i]^string[i];
putchar(result[i]);
}
return 1;
}
しかし、機能が正しく動作しません。putchar
読み取り不能なものを返します。私の間違いはどこですか?それともコード全体が間違っていますか?