恥ずかしい暗号化コード

古いコードの中にこんなんがあった。どうやらバイナリ中に平文パスワードを入れたくなかったらしいんだけど。

std::string& encode(std::string& s, int seed)
{
        std::string* ret = new std::string();
        for (std::string::iterator i = s.begin(); i != s.end(); i++) {
                seed = *i ^ seed;
                *ret += seed;
        }
        return *ret;
}

std::string& decode(std::string& s, int seed)
{
	std::string* ret = new std::string();
	for (std::string::iterator i = s.begin(); i != s.end(); i++) {
		char x = *i ^ seed;
		*ret += x;
		seed ^= x;
	}
	return *ret;
}

簡単なもんを入れてみるとこんなかんじ。

tkuro
>> \x15~\x0by\x16: successed
sawshark
>> \x12s\x04w\x1f~\x0cg: successed
Hogerimakuri
>> )F!D6_2S8M?V: successed
ponponpain
>> \x11~\x10`\x0fa\x11p\x19w: successed

一応、難読化はされるんだけど、リーク危険だし、鍵が実用上8bitしかないってなによそれでかなり恥ずかしいんだけど、普通はこういう場合どうするのかな?? というのが気になって晒して見ました。あとで調べてみよ。