annyoung

[AutoHotKey Header] MD5.ahk 본문

프로그래밍

[AutoHotKey Header] MD5.ahk

nopsled 2014. 3. 14. 08:46


 

MD5.ahk


HashFromAddr(pData, len, algid, key=0)

{

  hProv := size := hHash := hash := ""

  ptr := (A_PtrSize) ? "ptr" : "uint"

  aw := (A_IsUnicode) ? "W" : "A"

  if (DllCall("advapi32\CryptAcquireContext" aw, ptr "*", hProv, ptr, 0, ptr, 0, "uint", 1, "uint", 0xF0000000))

  {

    if (DllCall("advapi32\CryptCreateHash", ptr, hProv, "uint", algid, "uint", key, "uint", 0, ptr "*", hHash))

    {

      if (DllCall("advapi32\CryptHashData", ptr, hHash, ptr, pData, "uint", len, "uint", 0))

      {

        if (DllCall("advapi32\CryptGetHashParam", ptr, hHash, "uint", 2, ptr, 0, "uint*", size, "uint", 0))

        {

          VarSetCapacity(bhash, size, 0)

          DllCall("advapi32\CryptGetHashParam", ptr, hHash, "uint", 2, ptr, &bhash, "uint*", size, "uint", 0)

        }

      }

      DllCall("advapi32\CryptDestroyHash", ptr, hHash)

    }

    DllCall("advapi32\CryptReleaseContext", ptr, hProv, "uint", 0)

  }

  int := A_FormatInteger

  SetFormat, Integer, h

  Loop, % size

  {

    v := substr(NumGet(bhash, A_Index-1, "uchar") "", 3)

    while (strlen(v)<2)

      v := "0" v

    hash .= v

  }

  SetFormat, Integer, % int

  return hash

}

 

 

HashFromString(string, algid, key=0)

{

  len := strlen(string)

  if (A_IsUnicode)

  {

    VarSetCapacity(data, len)

    StrPut := "StrPut"

    %StrPut%(string, &data, len, "cp0")

    return HashFromAddr(&data, len, algid, key)

  }

  data := string

  return HashFromAddr(&data, len, algid, key)

}

 

MD5(string)

{

  return HashFromString(string, 0x8003)

}

 

 Description : MD5 암호화를 하기위한 AHK 헤더 스크립트 입니다.



Comments