暗号化


Boost.Serializationでserializeしたバイナリデータを,暗号化.

…は略したけど,バイナリデータに対してBoost.Serializationを呼ぶ.


バイナリデータを扱うときはfopenとか使わなきゃならないんだよね.

std::fstreamとか使うと色々整形されたりしてうまく扱えない.


使い方が間違ってるのかなぁ.


ていうか,これって安全なのかなぁ?

とかよく考えます.


#include <stdio.h> //for FILE
#include <string>
#include <iostream>
#include <fstream>
#include <sstream>
#include <boost/serialization/serialization.hpp>
#include <boost/archive/binary_iarchive.hpp>
#include <boost/archive/binary_oarchive.hpp>

int main(){

  int n = 3; // お試しデータ

  // 書き込むときのバイナリ化はめんどいので略
  {
    std::ofstream ofs("data.txt", std::ios_base::out | std::ios_base::binary);
    boost::archive::binary_oarchive ar(ofs);
    ar << (const int&)n;
  }

  // バイナリを取得
  FILE* fp = fopen("data.txt", "rb");
  fseek(fp, 0, SEEK_END);
  long size = ftell(fp); // ファイルサイズ
  fseek(fp, 0, SEEK_SET);
  char* buf = new char[size];
  fread(buf, sizeof(char), size, fp);
  fclose(fp);

  // ここでバイナリをいじる(複合化とか)

  std::string str(buf, size);
  delete [] buf;

  std::istringstream iss(str, std::ios_base::in | std::ios_base::binary);

  int result;
  booost::archive::binary_iarchive ar(iss);
  ar >> result;

  std::cout << result; // 3

}


ぁー,fopen_sとかあったら使ってくださいね.

自分は_wfopen_sをラップしたafc::utility::c_fileを使ってますが.


あと失敗した時は…ってのも略w