Skip to content

sh-miyoshi/aes

Repository files navigation

AES Library

概要

このリポジトリではc++実装によるAESのライブラリとそれを用いたファイル暗号化プログラムを公開しています。

使い方(プログラム編)

  • windowsの場合

    # 暗号化の場合
    ./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.haes.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ライセンスでリリースされています。
詳細はライセンスファイルを参照してください。