Base64エンコードデコードをいろんな言語で書いてみた

まとめリンク: 同じことをいろんな言語で書いてみたシリーズ



C++ (Base64エンコード)

// Base64 は CLX C++ Libraries
// http://clx.cielquis.net/index.html or https://github.com/clown/clx を利用
#include "./clx/base64.h"
#include <fstream>
int main(int argc, char *argv[])
{
  std::string filename = "./data_file_name"; // Base64を取得したいファイル名
  std::ifstream ifs(filename.c_str(), std::ios::in | std::ios::binary);
  if (!ifs)
  {
    std::cout << "ファイルが見つかりませんでした" << std::endl;
    return 1;
  }
  ifs.seekg(0, std::ios::end);
  long long int dat_size = ifs.tellg();
  ifs.seekg(0);
  char *dat = new char[dat_size];
  ifs.read(dat, dat_size);
  std::cout << clx::base64::encode(dat, dat_size);
}

C++ (Base64デコード)

// Base64 は CLX C++ Libraries
// http://clx.cielquis.net/index.html or https://github.com/clown/clx を利用
#include "./clx/base64.h"
#include <fstream>
int main(int argc, char *argv[])
{
  std::string filename = "./base64_text_data";   // デコードしたいBase64ファイル名
  std::string output_filename = "./decode_data"; // 出力ファイル名
  std::ifstream ifs(filename.c_str(), std::ios::in | std::ios::binary);
  if (!ifs)
  {
    std::cout << "ファイルが見つかりませんでした" << std::endl;
    return 1;
  }
  std::string dat = std::string(
      std::istreambuf_iterator<char>(ifs),
      std::istreambuf_iterator<char>()
  );
  std::ofstream ofs(output_filename, std::ios_base::binary);
  std::ostreambuf_iterator<char> output(ofs);
  clx::base64::decode(dat.begin(), dat.end(), output);
}


Ruby (Base64エンコード)

require "base64"
filename = "./data_file_name" # Base64を取得したいファイル名
dat = File.read(filename)
print Base64.encode64(dat)

Ruby (Base64デコード)

require "base64"
filename = "./base64_text_data" # デコードしたいBase64ファイル名
output_filename = "./decode_data" # 出力ファイル名
dat = File.read(filename)
File.open(output_filename, "w") { |f|
  f.write(Base64.decode64(dat))
}


Crystal (Base64エンコード)

require "base64"
filename = "./data_file_name" # Base64を取得したいファイル名
dat = File.read(filename)
print Base64.encode(dat)

Crystal (Base64デコード)

require "base64"
filename = "./base64_text_data" # デコードしたいBase64ファイル名
output_filename = "./decode_data" # 出力ファイル名
dat = File.read(filename)
File.open(output_filename, "w") { |f|
  f.write(Base64.decode(dat))
}


Rust (Base64エンコード)

// base64クレート -> https://crates.io/crates/base64
use std::io::prelude::*;
fn main() {
    let filename: &str = "./data_file_name"; // Base64を取得したいファイル名
    let mut f = std::fs::File::open(filename).expect("ファイルが見つかりませんでした");
    let mut dat = Vec::new();
    f.read_to_end(&mut dat).expect("ファイルの読み込みで問題が発生しました");
    print!("{}", base64::encode(dat));
}

Rust (Base64デコード)

// base64クレート -> https://crates.io/crates/base64
use std::io::Write;
fn main() {
    let filename: &str = "./base64_text_data"; // デコードしたいBase64ファイル名
    let output_filename: &str = "./decode_data"; // 出力ファイル名
    let dat = std::fs::read_to_string(&filename).expect("ファイルを読み込めませんでした");
    let bytes = base64::decode(dat).expect("デコード作業に失敗しました");
    let mut f = std::fs::File::create(&output_filename).expect("ファイルの確保に失敗しました");
    f.write_all(&bytes).expect("ファイルの書き出しに失敗しました");
}


Python3 (Base64エンコード)

import base64
filename = "./data_file_name" # Base64を取得したいファイル名
dat = open(filename, "rb").read()
print(base64.b64encode(dat).decode("utf-8"), end="")

Python3 (Base64デコード)

import base64
filename = "./base64_text_data" # デコードしたいBase64ファイル名
output_filename = "./decode_data" # 出力ファイル名
dat = open(filename, "rb").read()
with open(output_filename, "wb") as f:
  f.write(base64.b64decode(dat))


Node.js (Base64エンコード)

'use strict'
const filename = "./data_file_name" // Base64を取得したいファイル名
process.stdout.write(
  require("fs").readFileSync(filename, 'base64')
);

Node.js (Base64デコード)

'use strict'
const fs = require("fs");
const filename = "./base64_text_data" // デコードしたいBase64ファイル名
const output_filename = "./decode_data" // 出力ファイル名
const dat = fs.readFileSync(filename, 'utf8');
fs.promises.writeFile(output_filename, dat, { encoding: "base64" });


C# (Base64エンコード)

String filename = "./data_file_name"; // MD5を取得したいファイル名
byte[] dat = File.ReadAllBytes(filename);
Console.Write(Convert.ToBase64String(dat));

C# (Base64デコード)

String filename = "./base64_text_data"; // デコードしたいBase64ファイル名
String output_filename = "./decode_data"; // 出力ファイル名
String dat = System.IO.File.ReadAllText(filename, System.Text.Encoding.UTF8);
using (var fs = new FileStream(output_filename, FileMode.Create))
using (var bw = new BinaryWriter(fs))
{
  bw.Write(Convert.FromBase64String(dat));
}