#include <stdio.h>
#include <windows.h>
typedef void (__stdcall *pMakeDesKey)(unsigned char key[8],unsigned char in[8]);
typedef int (__stdcall *pCheckDesKey)(unsigned char key[8]);
typedef void (__stdcall *pDesEncode)
(unsigned char out[8],unsigned char in[8],unsigned char key[8]);
typedef void (__stdcall *pDesDecode)
(unsigned char out[8],unsigned char in[8],unsigned char key[8]);
void printdata(char* prefix,unsigned char data[8]) {
int i;
printf("%s",prefix);
for(i=0;i<8;i++)printf("%02X",(int)data[i]);
printf("\n");
}
int main(int argc, char *argv[]) {
HMODULE hdll;
int error=0;
/*関数ポインタ*/
pMakeDesKey MakeDesKey;
pCheckDesKey CheckDesKey;
pDesEncode DesEncode;
pDesDecode DesDecode;
/*暗号化変数*/
unsigned char keymoto[7]={0x12,0x34,0x56,0x78,0x9A,0xBC,0xDE};
unsigned char key[8];
unsigned char hirabun[8]={0xFE,0xDC,0xBA,0x98,0x76,0x54,0x32,0x10};
unsigned char angou[8];
unsigned char fukugou[8];
/*DLLのロード*/
hdll=LoadLibrary("des.dll");
if(hdll==NULL) {
printf("des.dllが見つかりません。\n");
return 1;
}
MakeDesKey=(pMakeDesKey)GetProcAddress(hdll,"MakeDesKey");
CheckDesKey=(pCheckDesKey)GetProcAddress(hdll,"CheckDesKey");
DesEncode=(pDesEncode)GetProcAddress(hdll,"DesEncode");
DesDecode=(pDesDecode)GetProcAddress(hdll,"DesDecode");
if(MakeDesKey==NULL) {
printf("MakeDesKey関数が見つかりません。\n");
error=1;
}
if(CheckDesKey==NULL) {
printf("CheckDesKey関数が見つかりません。\n");
error=1;
}
if(DesEncode==NULL) {
printf("DesEncode関数が見つかりません。\n");
error=1;
}
if(DesDecode==NULL) {
printf("DesDecode関数が見つかりません。\n");
error=1;
}
if(error)return 1;
/*暗号化*/
MakeDesKey(key,keymoto);
printdata(" 鍵:",key);
if(!CheckDesKey(key))printf("鍵が不正です。\n");
printdata(" 平文:",hirabun);
DesEncode(angou,hirabun,key);
printdata("暗号文:",angou);
DesDecode(fukugou,angou,key);
printdata("復号後:",fukugou);
/*解放*/
FreeLibrary(hdll);
return 0;
}
これは、http://www.geocities.jp/ky_webid/win32c/058.htmlの記述に従ったからです。
しかし、サイトによっては、http://www.hm-lab.net/archives/269のように
LoadLibraryの戻り値をHINSTANCE型で受けているところがあります。
これはどちらが正しいのでしょうか?
教えていただければ幸いです。
よろしくお願いします。