私がC++に触れてから久しぶりで、言語に堪能になったことがないので、無知を許してください。
XOR暗号化をいじくり回すために、次の小さなプログラムを作成しました。
#include <iostream>
#include <iomanip>
#include "string.h"
using std::cout;
using std::endl;
using std::hex;
using std::string;
string cipher(string msg, char key);
int main(void)
{
string msg = "Now is the winter of our discontent, made glorious summer by this sun of York.";
char key = 's'; // ASCII 115
string ctext = cipher(msg, key);
cout << "Plaintext: " << msg << endl;
cout << "Ciphertext (hex): ";
for (int i = 0; i < ctext.size(); i++)
cout << hex << ctext[i];
return 0;
}
string cipher(string msg, char key)
/*
Symmetric XOR cipher
*/
{
for(int i = 0; i < msg.size(); i++)
msg[i] ^= key;
return msg;
}
このコードは以下を出力します:
Plaintext: Now is the winter of our discontent, made glorious summer by this sun of York.
Ciphertext (hex): =SSSSSS_SSSS
SSSS*]
16進値を出力できないのはなぜですか?私は何が間違っているのですか?
また、一般的なアドバイスをいただければ幸いです。