このリポジトリではc++実装によるAESのライブラリとそれを用いたファイル暗号化プログラムを公開しています。
-
windowsの場合
- ブラウザからhttps://github.com/sh-miyoshi/AES/releases/download/v2.0/aes.exeにアクセス
- aes.exeを任意の場所の保存
- コマンドプロンプトを開き、以下を実行
# 暗号化の場合 ./aes.exe --enc input.txt encrypt.dat # 復号の場合 ./aes.exe --dec encrypt.dat output.txt
-
Linuxの場合
- コマンドラインで以下を実行する
wget https://github.com/sh-miyoshi/AES/releases/download/v2.0/aes chmod +x aes # 暗号化の場合 ./aes --enc input.txt encrypt.dat # 復号の場合 ./aes --dec encrypt.dat output.txt
aes.h
とaes.cpp
を自身のプログラムに加えていただくだけです。
#include "aes.h"
#include <stdio.h>
int main() {
std::string input_fname = "README.md";
std::string encrypt_fname = "test_enc.dat";
std::string result_fname = "result.md";
unsigned char iv[16]; // initialize vector
// please set secure key
unsigned char key[16] = {
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15
};
aes::AES::GenerateIV(iv, aes::AES_CTR);
// printf("iv: (");
// for (int i = 0; i < 16; i++) {
// printf("%d", iv[i]);
// if (i < 15) {
// printf(", ");
// }
// }
// puts(")");
// create handler with 128-bit key length, CTR mode
aes::AES handler(aes::AES_CTR, key, 128, iv);
// Encryption
aes::Error err = handler.EncryptFile(input_fname, encrypt_fname);
if (!err.success) {
printf("Failed to encrypt: %s\n", err.message.c_str());
return 1;
}
// Decryption
err = handler.DecryptFile(encrypt_fname, result_fname);
if (!err.success) {
printf("Failed to decrypt: %s\n", err.message.c_str());
return 1;
}
}
!!!注意点!!!
このプログラムにはパスフレーズからAESのIVを生成する場所にセキュアでない場所があります。
また、実行中のメモリ状態まで意識して開発していないので本当にセキュアな実装が必要な場合は使用しないでください。
ハードウェアアクセラレーター(AES NI命令)が使用できない場合はaes.h
の以下の場所を変更してください。
#define USE_AES_NI 1 // 変更前
// ↓
#define USE_AES_NI 0 // 変更後
Shunsuke Miyoshi
このプログラムはMITライセンスでリリースされています。
詳細はライセンスファイルを参照してください。