全然更新しないブログ
HSPメモ帳
暗号 (Advapi32.dll)
暗号のメモ
単純なスクリプトなので詳細は省略。
単純なスクリプトなので詳細は省略。
/* -------------------------------------------------------------------------- Crypt : Module -------------------------------------------------------------------------- */ #module Crypt #define global PROV_RSA_FULL 1 #define global MS_ENHANCED_PROV "Microsoft Enhanced Cryptographic Provider v1.0" #define global CALG_MD5 0x00008003 #define global CALG_RC4 0x00006801 #uselib "Advapi32.dll" #cfunc CryptAcquireContext "CryptAcquireContextA" var,int,str,int,int #func CryptReleaseContext "CryptReleaseContext" int,int #cfunc CryptCreateHash "CryptCreateHash" int,int,int,int,var #cfunc CryptHashData "CryptHashData" int,var,int,int #func CryptDestroyHash "CryptDestroyHash" int #cfunc CryptDeriveKey "CryptDeriveKey" int,int,int,int,var #func CryptDestroyKey "CryptDestroyKey" int #cfunc CryptEncrypt "CryptEncrypt" int,int,int,int,var,var,int #cfunc CryptDecrypt "CryptDecrypt" int,int,int,int,var,var #uselib "Crypt32.dll" // Requires Windows Vista or Windows XP. #cfunc CryptBinaryToStringZ "CryptBinaryToStringA" var,int,int,int,var #cfunc CryptBinaryToString "CryptBinaryToStringA" var,int,int,var,var #deffunc CryptDestroy CryptDestroyKey hKey : hKey = 0 CryptDestroyHash hHash : hHash = 0 CryptReleaseContext hProv,0 : hProv = 0 return #defcfunc GetKey_ var pw,int pType,int hALG,int pALG,int keyGen if( (hProv != 0) || (hHash != 0) || (hKey != 0) ) : CryptDestroy if( CryptAcquireContext(hProv,0,MS_ENHANCED_PROV,pType,0) ){ if( CryptCreateHash(hProv,hALG,0,0,hHash) ){ if( CryptHashData(hHash,pw,strlen(pw),0) ){ if( CryptDeriveKey(hProv,pALG,hHash,keyGen,hKey) ){ return hKey } } } } return 0 #defcfunc Encrypt_ int pType,int hALG,int pALG,var buf,var pw,int len,int keyGen ret = 0 : dwByte = len hKey = GetKey_(pw,pType,hALG,pALG,keyGen) if( hKey ){ ret = CryptEncrypt(hKey,0,1,0,buf,dwByte,dwByte) if( ret ) : ret = dwByte } CryptDestroy return ret #defcfunc Decrypt_ int pType,int hALG,int pALG,var buf,var pw,int len,int keyGen ret = 0 : dwByte = len hKey = GetKey_(pw,pType,hALG,pALG,keyGen) if( hKey ){ ret = CryptDecrypt(hKey,0,1,0,buf,dwByte) if( ret ) : ret = dwByte } CryptDestroy return ret #defcfunc GetKeys var pw return GetKey_(pw,PROV_RSA_FULL,CALG_MD5,CALG_RC4,0x800000) #defcfunc Encrypt var buf,var pw,int len return Encrypt_(PROV_RSA_FULL,CALG_MD5,CALG_RC4,buf,pw,len) #defcfunc Decrypt var buf,var pw,int len return Decrypt_(PROV_RSA_FULL,CALG_MD5,CALG_RC4,buf,pw,len) #defcfunc EncryptKey var buf,int key,int len dwByte = len if( CryptEncrypt(key,0,1,0,buf,dwByte,dwByte) ) : return dwByte return 0 #defcfunc DecryptKey var buf,int key,int len dwByte = len if( CryptDecrypt(key,0,1,0,buf,dwByte) ) : return dwByte return 0 #defcfunc GetBinToStr var pStr,var pBin,int len dwByte = 0 if( CryptBinaryToStringZ(pBin,len,11,0,dwByte) ){ sdim pStr,dwByte+1 if( CryptBinaryToString(pBin,len,11,pStr,dwByte) ){ return 1 } } return 0 #global /* -------------------------------------------------------------------------- end of Crypt -------------------------------------------------------------------------- */ #define SCR0_X 500 #define SCR0_Y 500 *main sdim mb,10000 : sdim ip,260 : sdim btn,16,2 bCrypt = 0 : bBin = 0 screen 0,SCR0_X,SCR0_Y objmode 2 : font "MS ゴシック", 12 objsize SCR0_X / 2,20 btn(0)="暗号化","復号化" pos 0, 0 : button gosub btn(0), *crypt pos SCR0_X/2,0 : button gosub "表示変更", *bin pos 10,24 : mes "PASSWORD" pos 80,20 : input ip,SCR0_X - 80,20 pos 0,40 : mesbox mb,SCR0_X,SCR0_Y-40 stop *mbchg if(bBin){ if(bCrypt == 0) : len = strlen(mb) if( GetBinToStr(s,mb,len) ) : objprm 3,s } else{ objprm 3,mb } return *crypt if(bCrypt){ ret = Decrypt(mb,ip,len) if(ret) : objprm 3,mb } else{ len = strlen(mb) ret = Encrypt(mb,ip,len) } if( ret ){ bCrypt ^= 1 : objprm 0,btn(bCrypt) gosub *mbchg } return ret *bin bBin ^= 1 gosub *mbchg return
コメント ( 9 ) | Trackback ( 0 )
« MSDN VS 2008 | 次の記事へ » |
スクリプトを求めてサイトを彷徨っていて、ここに辿り着いたのですが、
参考になるスクリプトがありすぎて(^^;
これからお世話になると思うので、ご挨拶しようと思い
コメントしました。
では、失礼します。また来ます(^^;;
コメントありがとうございます。
間違いがあるかもしれませんが、参考になりましたら幸いです。
DDD)D)F)C((C(C((C(()R))R)R)R)R)R)R))R)R)(C((C((C(
Crypt : Module
-------------------------------------------------------------------------- */
#module Crypt
#define global PROV_RSA_FULL 1
#define global MS_ENHANCED_PROV "Microsoft Enhanced Cryptographic Provider v1.0"
#define global CALG_MD5 0x00008003
#define global CALG_RC4 0x00006801
#uselib "Advapi32.dll"
#cfunc CryptAcquireContext "CryptAcquireContextA" var,int,str,int,int
#func CryptReleaseContext "CryptReleaseContext" int,int
#cfunc CryptCreateHash "CryptCreateHash" int,int,int,int,var
#cfunc CryptHashData "CryptHashData" int,var,int,int
#func CryptDestroyHash "CryptDestroyHash" int
#cfunc CryptDeriveKey "CryptDeriveKey" int,int,int,int,var
#func CryptDestroyKey "CryptDestroyKey" int
#cfunc CryptEncrypt "CryptEncrypt" int,int,int,int,var,var,int
#cfunc CryptDecrypt "CryptDecrypt" int,int,int,int,var,var
#uselib "Crypt32.dll" // Requires Windows Vista or Windows XP.
#cfunc CryptBinaryToStringZ "CryptBinaryToStringA" var,int,int,int,var
#cfunc CryptBinaryToString "CryptBinaryToStringA" var,int,int,var,var
#deffunc CryptDestroy
CryptDestroyKey hKey : hKey = 0
CryptDestroyHash hHash : hHash = 0
CryptReleaseContext hProv,0 : hProv = 0
return
#defcfunc GetKey_ var pw,int pType,int hALG,int pALG,int keyGen
if( (hProv != 0) || (hHash != 0) || (hKey != 0) ) : CryptDestroy
if( CryptAcquireContext(hProv,0,MS_ENHANCED_PROV,pType,0) ){
if( CryptCreateHash(hProv,hALG,0,0,hHash) ){
if( CryptHashData(hHash,pw,strlen(pw),0) ){
if( CryptDeriveKey(hProv,pALG,hHash,keyGen,hKey) ){
return hKey
}
}
}
}
return 0
#defcfunc Encrypt_ int pType,int hALG,int pALG,var buf,var pw,int len,int keyGen
ret = 0 : dwByte = len
hKey = GetKey_(pw,pType,hALG,pALG,keyGen)
if( hKey ){
ret = CryptEncrypt(hKey,0,1,0,buf,dwByte,dwByte)
if( ret ) : ret = dwByte
}
CryptDestroy
return ret
#defcfunc Decrypt_ int pType,int hALG,int pALG,var buf,var pw,int len,int keyGen
ret = 0 : dwByte = len
hKey = GetKey_(pw,pType,hALG,pALG,keyGen)
if( hKey ){
ret = CryptDecrypt(hKey,0,1,0,buf,dwByte)
if( ret ) : ret = dwByte
}
CryptDestroy
return ret
#defcfunc GetKeys var pw
return GetKey_(pw,PROV_RSA_FULL,CALG_MD5,CALG_RC4,0x800000)
#defcfunc Encrypt var buf,var pw,int len
return Encrypt_(PROV_RSA_FULL,CALG_MD5,CALG_RC4,buf,pw,len)
#defcfunc Decrypt var buf,var pw,int len
return Decrypt_(PROV_RSA_FULL,CALG_MD5,CALG_RC4,buf,pw,len)
#defcfunc EncryptKey var buf,int key,int len
dwByte = len
if( CryptEncrypt(key,0,1,0,buf,dwByte,dwByte) ) : return dwByte
return 0
#defcfunc DecryptKey var buf,int key,int len
dwByte = len
if( CryptDecrypt(key,0,1,0,buf,dwByte) ) : return dwByte
return 0
#defcfunc GetBinToStr var pStr,var pBin,int len
dwByte = 0
if( CryptBinaryToStringZ(pBin,len,11,0,dwByte) ){
sdim pStr,dwByte+1
if( CryptBinaryToString(pBin,len,11,pStr,dwByte) ){
return 1
}
}
return 0
#global
/* --------------------------------------------------------------------------
end of Crypt
-------------------------------------------------------------------------- */
#define SCR0_X 500
#define SCR0_Y 500
*main
sdim mb,10000 : sdim ip,260 : sdim btn,16,2
bCrypt = 0 : bBin = 0
screen 0,SCR0_X,SCR0_Y
objmode 2 : font "MS ゴシック", 12
objsize SCR0_X / 2,20
btn(0)="暗号化","復号化"
pos 0, 0 : button gosub btn(0), *crypt
pos SCR0_X/2,0 : button gosub "表示変更", *bin
pos 10,24 : mes "PASSWORD"
pos 80,20 : input ip,SCR0_X - 80,20
pos 0,40 : mesbox mb,SCR0_X,SCR0_Y-40
stop
*mbchg
if(bBin){
if(bCrypt == 0) : len = strlen(mb)
if( GetBinToStr(s,mb,len) ) : objprm 3,s
}
else{
objprm 3,mb
}
return
*crypt
if(bCrypt){
ret = Decrypt(mb,ip,len)
if(ret) : objprm 3,mb
}
else{
len = strlen(mb)
ret = Encrypt(mb,ip,len)
}
if( ret ){
bCrypt ^= 1 : objprm 0,btn(bCrypt)
gosub *mbchg
}
return ret
*bin
bBin ^= 1
gosub *mbchg
return