C++ でてけとーな暗号化/復号化

排他的論理和を使用したてきとーな暗号化。

[ソース]

#include <algorithm>

struct ango{
    explicit ango(int key) : key(key){}

    template<typename Range>
    Range
    operator ()(Range range) const{
        typedef typename std::iterator_traits<decltype(std::begin(range))>::value_type value_type;
        auto result = std::move(range);
        std::transform(std::begin(result), std::end(result), std::begin(result),
            [this](value_type const& value){
            return value ^ this->key;
        });
        return result;
    }

private:
    int key;
};


#include <string>
#include <iostream>


int
main(){
    int key = 42;
    ango filter(key);

    std::string str("satikokawaii");

    auto crypted = filter(str);
    std::cout << crypted << std::endl;

    auto decoded = filter(crypted);
    std::cout << decoded << std::endl;
    
    return 0;
}

[出力]

YK^CAEAK]KCC
satikokawaii


まぁ平文よりマシってレベルですかねぇ。
暗号化よりも鍵の扱いをどうするかの方がむずかしそう。
この手の処理って Boost にないんだろうか。