Brian の AES ライブラリをスタティックリンクして使用する
VC++ 2010 プロジェクトに与える プロパティシートファイル
aesBrianvs2010-11-01-11.props を作った.
- インクルードディレクトリ追加
- ライブラリディレクトリ追加
- 共通必須ライブラリ aes.lib と 選択的必須ライブラリ lib_asm_x86_v2c.lib をリンク
- マクロ $(Configuration) を使用しているため,構成 Debug/Release のどちらにも適用可能
<?xml version="1.0" encoding="utf-8"?> <Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <ImportGroup Label="PropertySheets" /> <PropertyGroup Label="UserMacros" /> <PropertyGroup /> <ItemDefinitionGroup> <ClCompile> <AdditionalIncludeDirectories>C:\Software\Develop\aesBrian\aes-vs2010-11-01-11</AdditionalIncludeDirectories> </ClCompile> <Link> <AdditionalLibraryDirectories>C:\Software\Develop\aesBrian\aes-vs2010-11-01-11\lib\Win32\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> <AdditionalDependencies>aes.lib;lib_asm_x86_v2c.lib;%(AdditionalDependencies)</AdditionalDependencies> </Link> </ItemDefinitionGroup> <ItemGroup /> </Project>
テストコード
main.cpp を書いた.使用法は C:\Software\Develop\aesBrian\aes-vs2010-11-01-11\aes.txt を参照する.AES-CBC-256 で暗号化し,復号化する.復号化結果が 16 バイトでぶち切れてしまっている.「aes_encrypt_ctx brian」で検索して,http://forums.devshed.com/c-programming-42/aes-encrypt-decrypt-in-c-687368.html を読んだりして,何が問題なのか探しているところ.でも誰かに教えて欲しい.
main.cpp
#include <memory> #include <aes.h> /** AES 暗号化関数 int aes_cbc_encrypt( const unsigned char *ibuf, // 暗号化するデータ unsigned char *obuf, // 暗号化後のデータ int len, // 入出力データサイズ unsigned char *iv, // 初期化ベクトル const aes_encrypt_ctx cx[1] // 鍵 ); */ int main ( int argc, char ** argv ) { const char *key = "gjopes4gp4ejypoj5ypj5h"; const char *iv = "asdfghjkloiuytrewwqwea"; const char *a = "1234567890123456789012"; unsigned char b[32]; unsigned char c[32]; ::memset( b, 0, sizeof(b) ); ::memset( c, 0, sizeof(c) ); // aesBrian 使用時に必要 aes_init(); // 暗号化 aes_encrypt_ctx cxEnc[2]; aes_encrypt_key256( (unsigned char*)key, cxEnc ); aes_encrypt( (unsigned char*)a, b, cxEnc ); // 復号化 aes_decrypt_ctx cxDec[2]; aes_decrypt_key256( (unsigned char*)key, cxDec ); aes_decrypt( b, c, cxDec ); return 0; }
2011年1月26日11時30分追記
AES-CBC を使用するには別の関数を利用する必要があった.が,その関数を使用しての暗号化/復号化がまだできない.