暗号化定数(ENUM_CRYPT_METHOD)
暗号化定数(ENUM_CRYPT_METHOD)は、テキストなどを暗号化し、セキュリティを高めるために使用されます。
プログラムでパスワードを使用するときに、パスワードを暗号化をすると良いでしょう。
暗号化することで、セキュリティが高くなり、より信頼できる自動売買を作成することができます。
暗号化、復号化するには、以下の関数を使用してください。
暗号化するには、CryptEncode関数を使います。
暗号化を復号するには、CryptDecode関数を使います。
暗号化定数(ENUM_CRYPT_METHOD)
| 定数 | 説明(暗号化の計算方法) |
| CRYPT_BASE64 | BASE64変換 |
| CRYPT_AES128 | 128ビット(16バイト)キ―AES暗号化 |
| CRYPT_AES256 | 256ビット(32バイト)キ―AES暗号化 |
| CRYPT_DES | 56ビット(7バイト)キ―DES暗号化 |
| CRYPT_HASH_SHA1 | SHA-1ハッシュ計算 |
| CRYPT_HASH_SHA256 | SHA-256ハッシュ計算 |
| CRYPT_HASH_MD5 | MD5ハッシュ計算 |
| CRYPT_ARCH_ZIP | ZIPアーカイブ |
暗号化定数の使い方
主に、CryptEncode関数、CryptDecode関数で使用されます。
それぞれの関数の引数として使用されます。
例えば、以下のように使用します。
void OnStart()
{
//暗号化するテキスト
string text="Hello World";
//暗号化するための鍵
string keystr="ABCDEFG";
//暗号化に使用する配列
uchar src[],dst[],key[];
//鍵をchar型の配列に変換
StringToCharArray(keystr,key);
//テキストをchar型の配列に変換
StringToCharArray(text,src);
//暗号化前のテキストを表示
PrintFormat("Initial data: size=%d, string='%s'",ArraySize(src),CharArrayToString(src));
//src[] を key[] を使って、56ビット(7バイト)キ―DESで暗号化
//暗号化した結果を dst[] に格納
int res=CryptEncode(CRYPT_DES,src,key,dst);
//エラーをチェック
if(res>0)
{
//dst[] を key[] を使って、56ビット(7バイト)キ―DESで復号化
//復号化した結果を src[] に格納
res=CryptDecode(CRYPT_DES,dst,key,src);
//エラーをチェック
if(res>0)
{
//復号化されたテキストを表示
PrintFormat("Decoded data: size=%d, string='%s'",ArraySize(src),CharArrayToString(src));
}
}
}プログラム例
以下は、暗号化定数を使って文字列をAES256で暗号化し、復号化するサンプルプログラムです。
//+------------------------------------------------------------------+
//| 暗号化定数サンプルプログラム |
//+------------------------------------------------------------------+
void OnStart()
{
//--- 暗号化するテキスト
string text = "MQL4プログラミングで暗号化テスト";
//--- 32バイトの鍵(AES256用)
string keystr = "12345678901234567890123456789012";
//--- 配列の宣言
uchar src[], dst[], dec[], key[];
//--- 文字列を配列に変換
StringToCharArray(keystr, key);
StringToCharArray(text, src);
//--- 暗号化前のテキストを表示
PrintFormat("【暗号化前】size=%d, text='%s'", ArraySize(src), CharArrayToString(src));
//--- AES256で暗号化
int encResult = CryptEncode(CRYPT_AES256, src, key, dst);
if(encResult > 0)
{
PrintFormat("【暗号化成功】暗号化後のデータサイズ=%d", ArraySize(dst));
//--- 暗号化データを16進数文字列で表示
string hexStr = "";
for(int i = 0; i < ArraySize(dst); i++)
{
hexStr += StringFormat("%02X", dst[i]);
}
PrintFormat("【暗号化データ(HEX)】%s", hexStr);
//--- AES256で復号化
int decResult = CryptDecode(CRYPT_AES256, dst, key, dec);
if(decResult > 0)
{
PrintFormat("【復号化成功】size=%d, text='%s'", ArraySize(dec), CharArrayToString(dec));
}
else
{
PrintFormat("【復号化失敗】エラーコード=%d", GetLastError());
}
}
else
{
PrintFormat("【暗号化失敗】エラーコード=%d", GetLastError());
}
//--- ハッシュ計算の例(SHA256)
uchar hash[];
uchar dummy[];
int hashResult = CryptEncode(CRYPT_HASH_SHA256, src, dummy, hash);
if(hashResult > 0)
{
string hashStr = "";
for(int i = 0; i < ArraySize(hash); i++)
{
hashStr += StringFormat("%02X", hash[i]);
}
PrintFormat("【SHA-256ハッシュ】%s", hashStr);
}
}【補足】暗号化定数の列挙型(ENUM_CRYPT_METHOD)
暗号化定数は、ENUM_CRYPT_METHODという列挙型に含まれています。
列挙型は、定数群をひとまとめにしたものです。
以下のように使います。
ENUM_CRYPT_METHOD cryptMethod = CRYPT_DES;上記のようにプログラムすると、cryptMethod変数に CRYPT_DESの値が代入されます。





