打印
[实用程序源码及工具软件]

Nim语言调用动态链接库DLL例程源码(独家在21ic发表)

[复制链接]
131|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
hotpower|  楼主 | 2023-9-19 14:37 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 hotpower 于 2023-9-20 09:43 编辑
import strformat
proc PEA256Init(): bool {.stdcall, dynlib: "D:\\libpea256x64\\libpea256x64.dll", importc.}
proc PEA256Open(): pointer {.stdcall, dynlib: "D:\\libpea256x64\\libpea256x64.dll", importc.}
proc PEA256Close(handle: pointer): void {.stdcall, dynlib: "D:\\libpea256x64\\libpea256x64.dll", importc.}
proc PEA256EncryptUserKey(handle: pointer, keystr: cstring, keybuff: cstring, keyfile: cstring): cuint {.stdcall, dynlib: "D:\\libpea256x64\\libpea256x64.dll", importc.}
proc PEA256DecryptUserKey(handle: pointer, keystr: cstring, keybuff: cstring, keyfile: cstring): cuint {.stdcall, dynlib: "D:\\libpea256x64\\libpea256x64.dll", importc.}
proc PEA256EncryptBytes(handle: pointer, bits: array[0..3, uint8], len: cuint, subkey: cuint): cuint {.stdcall, dynlib: "D:\\libpea256x64\\libpea256x64.dll", importc.}
proc PEA256DecryptBytes(handle: pointer, bits: array[0..3, uint8], len: cuint, subkey: cuint): cuint {.stdcall, dynlib: "D:\\libpea256x64\\libpea256x64.dll", importc.}
proc PEA256EncryptBytesEx(handle: pointer, inbits: array[0..3, uint8], outbits: array[0..3, uint8], len: cuint, subkey: cuint): cuint {.stdcall, dynlib: "D:\\libpea256x64\\libpea256x64.dll", importc.}
proc PEA256DecryptBytesEx(handle: pointer, inbits: array[0..3, uint8], outbits: array[0..3, uint8], len: cuint, subkey: cuint): cuint {.stdcall, dynlib: "D:\\libpea256x64\\libpea256x64.dll", importc.}
proc PEA256EncryptArrayEx(handle: pointer, inbits: array[0..3, uint8], outbits: array[0..3, uint8], index: cuint, len: cuint, subkey: cuint): cuint {.stdcall, dynlib: "D:\\libpea256x64\\libpea256x64.dll", importc.}
proc PEA256DecryptArrayEx(handle: pointer, inbits: array[0..3, uint8], outbits: array[0..3, uint8], index: cuint, len: cuint, subkey: cuint): cuint {.stdcall, dynlib: "D:\\libpea256x64\\libpea256x64.dll", importc.}
proc PEA256EncryptBufferEx(handle: pointer, inbits: array[0..3, uint8], in_index: cuint, outbits: array[0..3, uint8], out_index: cuint, len: cuint, subkey: cuint): cuint {.stdcall, dynlib: "D:\\libpea256x64\\libpea256x64.dll", importc.}
proc PEA256DecryptBufferEx(handle: pointer, inbits: array[0..3, uint8], in_index: cuint, outbits: array[0..3, uint8], out_index: cuint, len: cuint, subkey: cuint): cuint {.stdcall, dynlib: "D:\\libpea256x64\\libpea256x64.dll", importc.}
proc PEA256Test(): bool {.stdcall, dynlib: "D:\\libpea256x64\\libpea256x64.dll", importc.}
proc PEA256Error(): cint {.stdcall, dynlib: "D:\\libpea256x64\\libpea256x64.dll", importc.}
proc PEA256Version(): cuint {.stdcall, dynlib: "D:\\libpea256x64\\libpea256x64.dll", importc.}

if PEA256Init():
  let handle: pointer = PEA256Open()
  if handle != nil:
    discard PEA256Test()
    echo fmt"PEA256Version = {PEA256Version():08X}"
    var Array, ArrayEncrypt, ArrayDecrypt: array[0..3, uint8]
    for i in 0..3:
      Array[i] = uint8(i)
      ArrayEncrypt[i] = uint8(i)
    var subkey = PEA256EncryptUserKey(handle, "123", "", "")
    echo fmt"subkey={subkey:#08X}"
    subkey = PEA256EncryptBytes(handle, Array, 4, subkey)
    for i in Array:
      stdout.write fmt" {i:02X}"
    echo ""
    subkey = PEA256DecryptUserKey(handle, "123", "", "")
    echo fmt"subkey={subkey:#08X}"
    subkey = PEA256DecryptBytes(handle, Array, 4, subkey)
    for i in Array:
       stdout.write fmt" {i:02X}"
    echo ""
    var sum: uint8 = 0;
    for i, v in Array:
      sum = sum xor uint8(i) xor v
    if sum != 0:
      echo "加解密1错误!!!"
    else:
      echo "加解密1正确!!!"
    subkey = PEA256EncryptUserKey(handle, "", "0123456789ABCDEF0123456789ABCDEF", "")
    echo fmt"subkey={subkey:#08X}"
    subkey = PEA256EncryptBytesEx(handle, ArrayEncrypt, ArrayDecrypt, 4, subkey)
    for i in ArrayDecrypt:
      stdout.write fmt" {i:02X}"
    echo ""
    subkey = PEA256DecryptUserKey(handle, "", "0123456789ABCDEF0123456789ABCDEF", "")
    echo fmt"subkey={subkey:#08X}"
    subkey = PEA256DecryptBytesEx(handle, ArrayDecrypt, ArrayEncrypt, 4, subkey)
    for i in ArrayEncrypt:
      stdout.write fmt" {i:02X}"
    echo ""
    sum = 0;
    for i, v in Array:
      sum = sum xor uint8(i) xor v
    if sum != 0:
      echo "加解密2错误!!!"
    else:
      echo "加解密2正确!!!"
    subkey = PEA256EncryptUserKey(handle, "", "", "123.PEA.KEY")
    echo fmt"subkey={subkey:#08X}"
    subkey = PEA256EncryptArrayEx(handle, ArrayEncrypt, ArrayDecrypt, 0, 4, subkey)
    for i in ArrayDecrypt:
      stdout.write fmt" {i:02X}"
    echo ""
    subkey = PEA256DecryptUserKey(handle, "", "", "123.PEA.KEY")
    echo fmt"subkey={subkey:#08X}"
    subkey = PEA256DecryptArrayEx(handle, ArrayDecrypt, ArrayEncrypt, 0, 4, subkey)
    for i in ArrayEncrypt:
      stdout.write fmt" {i:02X}"
    echo ""
    sum = 0;
    for i, v in Array:
      sum = sum xor uint8(i) xor v
    if sum != 0:
      echo "加解密3错误!!!"
    else:
      echo "加解密3正确!!!"
    subkey = PEA256EncryptUserKey(handle, "", "", "D:\\libpea256x64\\libpea256x64.dll")
    echo fmt"subkey={subkey:#08X}"
    subkey = PEA256EncryptBufferEx(handle, ArrayEncrypt, 0, ArrayDecrypt, 0, 4, subkey)
    for i in ArrayDecrypt:
      stdout.write fmt" {i:02X}"
    echo ""
    subkey = PEA256DecryptUserKey(handle, "", "", "D:\\libpea256x64\\libpea256x64.dll")
    echo fmt"subkey={subkey:#08X}"
    subkey = PEA256DecryptBufferEx(handle, ArrayDecrypt, 0, ArrayEncrypt, 0, 4, subkey)
    for i in ArrayEncrypt:
      stdout.write fmt" {i:02X}"
    echo ""
    sum = 0;
    for i, v in Array:
      sum = sum xor uint8(i) xor v
    if sum != 0:
      echo "加解密4错误!!!"
    else:
      echo "加解密4正确!!!"
    PEA256Close(handle)
  else:
    echo("PEA256Open()失败!!!")
  discard PEA256Error()
else:
  echo("PEA256Init()失败!!!")

when isMainModule:
  echo("Hello, World!")


使用特权

评论回复

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:[url=http://www.21ic.com/tools/HotWC3_V1.23.html]

1538

主题

21697

帖子

506

粉丝