文字列をファイルに暗号化して解読して戻す、かなり簡単な方法を実装しました。C++による排他的論理和
string encrypt(string msg, string key) {
string tmp(key);
while (key.size() < msg.size()) key += tmp;
for (std::string::size_type i = 0; i < msg.size(); ++i) msg[i] ^= key[i];
return msg;
}
string decrypt(string msg, string key) {
return encrypt(msg, key);
}
は、しかし、私が使用しているキーの一部は、非常に有用ではありません: 方法は、以下のような外観を使用してイム。文字列は正しく暗号化され、ファイルに書き込まれます。しかし、すべてを解読しようとすると(ファイルを文字列に読み込み、解読し、別のファイルに書き戻す)、新しいファイルはかなり小さくなり、そこに保存されている情報全体を含んでいません。私がこれまで試した
キーは、次のとおりです。私はあなたが私を助け、私に使用可能なキーを選択する方法上の任意のアドバイスを与えることができ
string crypt = "abc"; //works kinda well
string crypt = "_H84M!-juJHFXGT01X1*G6a$gEv"; //doesnt work
string crypt = "H84MjuJHFXGT01X1G6agEv"; //doesnt work either
期待しています。
ファイルの処理のためのコード:あなたが書きたいことがあり
ofstream os(...);
std::string encrypted = ...;
os.write(encrypted.data(), encrypted.size());
注:あなたが暗号化された文字列内のバイナリデータを持っていたよう
ofstream temp;
temp.open("temp", ios::in | ios::trunc);
temp << encrypt(buffer, crypt);
temp.close();
ifstream in(file);
string content((std::istreambuf_iterator<char>(in)) (std::istreambuf_iterator<char>()));
ofstream plain;
plain.open(newfile, ios::in | ios::trunc);
plain << decrypt(content, crypt);
plain.close();
暗号化された文字列でバイナリ0を取得し、バイナリ0文字で終了する文字列を期待する 'C'文字列関数を使用することを期待します。これにより、暗号化されたデータが切り捨てられます。 –
ファイルに読み書きするためのコードを表示します。 – Nelfeal
キーを増やしてナンセンスの代わりに 'msg [i]^= key [i%key.size()];を使うだけです。 – Slava