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

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

[复制链接]
78|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
hotpower|  楼主 | 2023-9-19 14:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 hotpower 于 2023-9-20 09:42 编辑
require 'ffi'

module PEA256Dll
  extend FFI::Library

  ffi_lib "D:\\libpea256x64\\libpea256x64.dll"
  attach_function :PEA256Init, [], :bool
  attach_function :PEA256Open, [], :pointer
  attach_function :PEA256Close, [:pointer], :void
  attach_function :PEA256EncryptUserKey, [:pointer, :string, :string, :string], :uint
  attach_function :PEA256DecryptUserKey, [:pointer, :string, :string, :string], :uint
  attach_function :PEA256EncryptBytes, [:pointer, :pointer, :uint, :uint], :uint
  attach_function :PEA256DecryptBytes, [:pointer, :pointer, :uint, :uint], :uint
  attach_function :PEA256EncryptBytesEx, [:pointer, :pointer, :pointer, :uint, :uint], :uint
  attach_function :PEA256DecryptBytesEx, [:pointer, :pointer, :pointer, :uint, :uint], :uint
  attach_function :PEA256EncryptArrayEx, [:pointer, :pointer, :pointer, :uint, :uint, :uint], :uint
  attach_function :PEA256DecryptArrayEx, [:pointer, :pointer, :pointer, :uint, :uint, :uint], :uint
  attach_function :PEA256EncryptBufferEx, [:pointer, :pointer, :uint, :pointer, :uint, :uint, :uint], :uint
  attach_function :PEA256DecryptBufferEx, [:pointer, :pointer, :uint, :pointer, :uint, :uint, :uint], :uint
  attach_function :PEA256Test, [], :bool
  attach_function :PEA256Error, [], :int
  attach_function :PEA256Version, [], :uint
end

if PEA256Dll.PEA256Init()
    puts "PEA256Version = #{PEA256Dll.PEA256Version().to_s(16).upcase}"
    handle = PEA256Dll.PEA256Open()
    if handle
        ArrayBytes = FFI::MemoryPointer.new(:uint8, 4).write_array_of_uint8([0, 1, 2, 3])
        ArrayEncrypt = FFI::MemoryPointer.new(:uint8, 4).write_array_of_uint8([0, 1, 2, 3])
        ArrayDecrypt = FFI::MemoryPointer.new(:uint8, 4)
        subkey = PEA256Dll.PEA256EncryptUserKey(handle, "123", "", "")
        puts "subkey0 = 0x#{subkey.to_s(16).upcase}"
        PEA256Dll.PEA256EncryptBytes(handle, ArrayBytes, 4, subkey)
        puts "#{ArrayBytes.read_array_of_uint8(4)}"
        subkey = PEA256Dll.PEA256DecryptUserKey(handle, "123", "", "")
        puts "subkey0 = 0x#{subkey.to_s(16).upcase}"
        PEA256Dll.PEA256DecryptBytes(handle, ArrayBytes, 4, subkey)
        puts "#{ArrayBytes.read_array_of_uint8(4)}"
        subkey = PEA256Dll.PEA256EncryptUserKey(handle, "", "0123456789ABCDEF0123456789ABCDEF", "")
        puts "subkey1 = 0x#{subkey.to_s(16).upcase}"
        PEA256Dll.PEA256EncryptBytesEx(handle, ArrayEncrypt, ArrayDecrypt, 4, subkey)
        puts "#{ArrayDecrypt.read_array_of_uint8(4)}"
        subkey = PEA256Dll.PEA256DecryptUserKey(handle, "", "0123456789ABCDEF0123456789ABCDEF", "")
        puts "subkey1 = 0x#{subkey.to_s(16).upcase}"
        PEA256Dll.PEA256DecryptBytesEx(handle, ArrayDecrypt, ArrayEncrypt, 4, subkey)
        puts "#{ArrayEncrypt.read_array_of_uint8(4)}"
        subkey = PEA256Dll.PEA256EncryptUserKey(handle, "", "", "123.PEA.KEY")
        puts "subkey2 = 0x#{subkey.to_s(16).upcase}"
        PEA256Dll.PEA256EncryptArrayEx(handle, ArrayEncrypt, ArrayDecrypt, 0, 4, subkey)
        puts "#{ArrayDecrypt.read_array_of_uint8(4)}"
        subkey = PEA256Dll.PEA256DecryptUserKey(handle, "", "", "123.PEA.KEY")
        puts "subkey2 = 0x#{subkey.to_s(16).upcase}"
        PEA256Dll.PEA256DecryptArrayEx(handle, ArrayDecrypt, ArrayEncrypt, 0, 4, subkey)
        puts "#{ArrayEncrypt.read_array_of_uint8(4)}"
        subkey = PEA256Dll.PEA256EncryptUserKey(handle, "", "", "D:\\libpea256x64\\libpea256x64.dll")
        puts "subkey3 = 0x#{subkey.to_s(16).upcase}"
        PEA256Dll.PEA256EncryptBufferEx(handle, ArrayEncrypt, 0, ArrayDecrypt, 0, 4, subkey)
        puts "#{ArrayDecrypt.read_array_of_uint8(4)}"
        subkey = PEA256Dll.PEA256DecryptUserKey(handle, "", "", "D:\\libpea256x64\\libpea256x64.dll")
        puts "subkey3 = 0x#{subkey.to_s(16).upcase}"
        PEA256Dll.PEA256DecryptBufferEx(handle, ArrayDecrypt, 0, ArrayEncrypt, 0, 4, subkey)
        puts "#{ArrayEncrypt.read_array_of_uint8(4)}"
        PEA256Dll.PEA256Close(handle)
    else
        puts "PEA256Open()失败!!!"
    end
    PEA256Dll.PEA256Error()
    puts "PEA256Init()结束!!!"
else
    puts "PEA256Init()失败!!!"
end


使用特权

评论回复

相关帖子

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

本版积分规则

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

1538

主题

21697

帖子

505

粉丝