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

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

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

typedef ffi_fn_FSP256Init = ffi.Bool Function();
typedef fn_FSP256Init = bool Function();
typedef ffi_fn_FSP256Open = ffi.Pointer Function();
typedef fn_FSP256Open = ffi.Pointer Function();
typedef ffi_fn_FSP256Close = ffi.Void Function(ffi.Pointer);
typedef fn_FSP256Close = void Function(ffi.Pointer);
typedef ffi_fn_FSP256EncryptUserKey = ffi.Uint32 Function(
    ffi.Pointer, ffi.Pointer<Utf8>, ffi.Pointer<Utf8>, ffi.Pointer<Utf8>);
typedef fn_FSP256EncryptUserKey = int Function(
    ffi.Pointer, ffi.Pointer<Utf8>, ffi.Pointer<Utf8>, ffi.Pointer<Utf8>);
typedef ffi_fn_FSP256DecryptUserKey = ffi.Uint32 Function(
    ffi.Pointer, ffi.Pointer<Utf8>, ffi.Pointer<Utf8>, ffi.Pointer<Utf8>);
typedef fn_FSP256DecryptUserKey = int Function(
    ffi.Pointer, ffi.Pointer<Utf8>, ffi.Pointer<Utf8>, ffi.Pointer<Utf8>);

typedef ffi_fn_FSP256EncryptBytes = ffi.Uint32 Function(
    ffi.Pointer, ffi.Pointer<ffi.Uint8>, ffi.Uint32, ffi.Uint32);
typedef fn_FSP256EncryptBytes = int Function(
    ffi.Pointer, ffi.Pointer<ffi.Uint8>, int, int);

typedef ffi_fn_FSP256DecryptBytes = ffi.Uint32 Function(
    ffi.Pointer, ffi.Pointer<ffi.Uint8>, ffi.Uint32, ffi.Uint32);
typedef fn_FSP256DecryptBytes = int Function(
    ffi.Pointer, ffi.Pointer<ffi.Uint8>, int, int);

typedef ffi_fn_FSP256EncryptBytesEx = ffi.Uint32 Function(ffi.Pointer,
    ffi.Pointer<ffi.Uint8>, ffi.Pointer<ffi.Uint8>, ffi.Uint32, ffi.Uint32);
typedef fn_FSP256EncryptBytesEx = int Function(
    ffi.Pointer, ffi.Pointer<ffi.Uint8>, ffi.Pointer<ffi.Uint8>, int, int);

typedef ffi_fn_FSP256DecryptBytesEx = ffi.Uint32 Function(ffi.Pointer,
    ffi.Pointer<ffi.Uint8>, ffi.Pointer<ffi.Uint8>, ffi.Uint32, ffi.Uint32);
typedef fn_FSP256DecryptBytesEx = int Function(
    ffi.Pointer, ffi.Pointer<ffi.Uint8>, ffi.Pointer<ffi.Uint8>, int, int);

typedef ffi_fn_FSP256EncryptArrayEx = ffi.Uint32 Function(
    ffi.Pointer,
    ffi.Pointer<ffi.Uint8>,
    ffi.Pointer<ffi.Uint8>,
    ffi.Uint32,
    ffi.Uint32,
    ffi.Uint32);
typedef fn_FSP256EncryptArrayEx = int Function(
    ffi.Pointer, ffi.Pointer<ffi.Uint8>, ffi.Pointer<ffi.Uint8>, int, int, int);

typedef ffi_fn_FSP256DecryptArrayEx = ffi.Uint32 Function(
    ffi.Pointer,
    ffi.Pointer<ffi.Uint8>,
    ffi.Pointer<ffi.Uint8>,
    ffi.Uint32,
    ffi.Uint32,
    ffi.Uint32);
typedef fn_FSP256DecryptArrayEx = int Function(
    ffi.Pointer, ffi.Pointer<ffi.Uint8>, ffi.Pointer<ffi.Uint8>, int, int, int);

typedef ffi_fn_FSP256EncryptBufferEx = ffi.Uint32 Function(
    ffi.Pointer,
    ffi.Pointer<ffi.Uint8>,
    ffi.Uint32,
    ffi.Pointer<ffi.Uint8>,
    ffi.Uint32,
    ffi.Uint32,
    ffi.Uint32);
typedef fn_FSP256EncryptBufferEx = int Function(ffi.Pointer,
    ffi.Pointer<ffi.Uint8>, int, ffi.Pointer<ffi.Uint8>, int, int, int);

typedef ffi_fn_FSP256DecryptBufferEx = ffi.Uint32 Function(
    ffi.Pointer,
    ffi.Pointer<ffi.Uint8>,
    ffi.Uint32,
    ffi.Pointer<ffi.Uint8>,
    ffi.Uint32,
    ffi.Uint32,
    ffi.Uint32);
typedef fn_FSP256DecryptBufferEx = int Function(ffi.Pointer,
    ffi.Pointer<ffi.Uint8>, int, ffi.Pointer<ffi.Uint8>, int, int, int);

typedef ffi_fn_FSP256Test = ffi.Bool Function();
typedef fn_FSP256Test = bool Function();
typedef ffi_fn_FSP256Error = ffi.Int32 Function();
typedef fn_FSP256Error = int Function();
typedef ffi_fn_FSP256Version = ffi.Uint32 Function();
typedef fn_FSP256Version = int Function();
void main() {
  final dylib = ffi.DynamicLibrary.open("D:\\libfsp256x64\\libfsp256x64.dll");
//  final dylib = ffi.DynamicLibrary.open("D:\\FSP256COM\\x64\\Release\\libfsp256x64.dll");
  if (dylib != 0) {
    final fn_FSP256Init FSP256Init = dylib
        .lookup<ffi.NativeFunction<ffi_fn_FSP256Init>>('FSP256Init')
        .asFunction();
    final fn_FSP256Open FSP256Open = dylib
        .lookup<ffi.NativeFunction<ffi_fn_FSP256Open>>('FSP256Open')
        .asFunction();
    final fn_FSP256Close FSP256Close = dylib
        .lookup<ffi.NativeFunction<ffi_fn_FSP256Close>>('FSP256Close')
        .asFunction();
    final fn_FSP256EncryptUserKey FSP256EncryptUserKey = dylib
        .lookup<ffi.NativeFunction<ffi_fn_FSP256EncryptUserKey>>(
            'FSP256EncryptUserKey')
        .asFunction();
    final fn_FSP256DecryptUserKey FSP256DecryptUserKey = dylib
        .lookup<ffi.NativeFunction<ffi_fn_FSP256DecryptUserKey>>(
            'FSP256DecryptUserKey')
        .asFunction();
    final fn_FSP256EncryptBytes FSP256EncryptBytes = dylib
        .lookup<ffi.NativeFunction<ffi_fn_FSP256EncryptBytes>>(
            'FSP256EncryptBytes')
        .asFunction();
    final fn_FSP256DecryptBytes FSP256DecryptBytes = dylib
        .lookup<ffi.NativeFunction<ffi_fn_FSP256DecryptBytes>>(
            'FSP256DecryptBytes')
        .asFunction();
    final fn_FSP256EncryptBytesEx FSP256EncryptBytesEx = dylib
        .lookup<ffi.NativeFunction<ffi_fn_FSP256EncryptBytesEx>>(
            'FSP256EncryptBytesEx')
        .asFunction();
    final fn_FSP256DecryptBytesEx FSP256DecryptBytesEx = dylib
        .lookup<ffi.NativeFunction<ffi_fn_FSP256DecryptBytesEx>>(
            'FSP256DecryptBytesEx')
        .asFunction();
    final fn_FSP256EncryptArrayEx FSP256EncryptArrayEx = dylib
        .lookup<ffi.NativeFunction<ffi_fn_FSP256EncryptArrayEx>>(
            'FSP256EncryptArrayEx')
        .asFunction();
    final fn_FSP256DecryptArrayEx FSP256DecryptArrayEx = dylib
        .lookup<ffi.NativeFunction<ffi_fn_FSP256DecryptArrayEx>>(
            'FSP256DecryptArrayEx')
        .asFunction();
    final fn_FSP256EncryptBufferEx FSP256EncryptBufferEx = dylib
        .lookup<ffi.NativeFunction<ffi_fn_FSP256EncryptBufferEx>>(
            'FSP256EncryptBufferEx')
        .asFunction();
    final fn_FSP256DecryptBufferEx FSP256DecryptBufferEx = dylib
        .lookup<ffi.NativeFunction<ffi_fn_FSP256DecryptBufferEx>>(
            'FSP256DecryptBufferEx')
        .asFunction();

    final fn_FSP256Test FSP256Test = dylib
        .lookup<ffi.NativeFunction<ffi_fn_FSP256Test>>('FSP256Test')
        .asFunction();
    final fn_FSP256Error FSP256Error = dylib
        .lookup<ffi.NativeFunction<ffi_fn_FSP256Error>>('FSP256Error')
        .asFunction();
    final fn_FSP256Version FSP256Version = dylib
        .lookup<ffi.NativeFunction<ffi_fn_FSP256Version>>('FSP256Version')
        .asFunction();

    if (FSP256Init()) {
      FSP256Test();
      print(
          "FSP256Version = ${FSP256Version().toRadixString(16).toUpperCase()}");
      var handle = FSP256Open();
      if (handle != 0) {
        print("FSP256Open()成功!!!");
        ffi.Pointer<ffi.Uint8> Array = malloc.allocate<ffi.Uint8>(4);
        ffi.Pointer<ffi.Uint8> ArrayEncrypt = malloc.allocate<ffi.Uint8>(4);
        ffi.Pointer<ffi.Uint8> ArrayDecrypt = malloc.allocate<ffi.Uint8>(4);
        for (var i = 0; i < 4; i++) {
          Array[i] = i;
          ArrayEncrypt[i] = i;
        }
        var subkey = FSP256EncryptUserKey(
            handle, "123".toNativeUtf8(), "".toNativeUtf8(), "".toNativeUtf8());
        print("subkey0 = 0x${subkey.toRadixString(16).toUpperCase()}");

        FSP256EncryptBytes(handle, Array, 4, subkey);
        for (var i = 0; i < 4; i++) {
          stdout.write(" ${Array[i].toRadixString(16).toUpperCase()}");
        }
        print("");
        subkey = FSP256DecryptUserKey(
            handle, "123".toNativeUtf8(), "".toNativeUtf8(), "".toNativeUtf8());
        print("subkey0 = 0x${subkey.toRadixString(16).toUpperCase()}");

        FSP256DecryptBytes(handle, Array, 4, subkey);
        for (var i = 0; i < 4; i++) {
          stdout.write(" ${Array[i].toRadixString(16).toUpperCase()}");
        }
        print("");

        FSP256Error();
        subkey = FSP256EncryptUserKey(
            handle,
            "".toNativeUtf8(),
            "0123456789ABCDEF0123456789ABCDEF".toNativeUtf8(),
            "".toNativeUtf8());
        print("subkey1 = 0x${subkey.toRadixString(16).toUpperCase()}");
        FSP256EncryptBytesEx(handle, ArrayEncrypt, ArrayDecrypt, 4, subkey);
        for (var i = 0; i < 4; i++) {
          stdout.write(" ${ArrayDecrypt[i].toRadixString(16).toUpperCase()}");
        }
        print("");
        subkey = FSP256DecryptUserKey(
            handle,
            "".toNativeUtf8(),
            "0123456789ABCDEF0123456789ABCDEF".toNativeUtf8(),
            "".toNativeUtf8());
        print("subkey1 = 0x${subkey.toRadixString(16).toUpperCase()}");
        FSP256DecryptBytesEx(handle, ArrayDecrypt, ArrayEncrypt, 4, subkey);
        for (var i = 0; i < 4; i++) {
          stdout.write(" ${ArrayEncrypt[i].toRadixString(16).toUpperCase()}");
        }
        print("");

        subkey = FSP256EncryptUserKey(handle, "".toNativeUtf8(),
            "".toNativeUtf8(), "123.FSP.KEY".toNativeUtf8());
        print("subkey2 = 0x${subkey.toRadixString(16).toUpperCase()}");
        FSP256EncryptArrayEx(handle, ArrayEncrypt, ArrayDecrypt, 0, 4, subkey);
        for (var i = 0; i < 4; i++) {
          stdout.write(" ${ArrayDecrypt[i].toRadixString(16).toUpperCase()}");
        }
        print("");

        subkey = FSP256DecryptUserKey(handle, "".toNativeUtf8(),
            "".toNativeUtf8(), "123.FSP.KEY".toNativeUtf8());
        print("subkey2 = 0x${subkey.toRadixString(16).toUpperCase()}");
        FSP256DecryptArrayEx(handle, ArrayDecrypt, ArrayEncrypt, 0, 4, subkey);
        for (var i = 0; i < 4; i++) {
          stdout.write(" ${ArrayEncrypt[i].toRadixString(16).toUpperCase()}");
        }
        print("");
        subkey = PEA256EncryptUserKey(
            handle,
            "".toNativeUtf8(),
            "".toNativeUtf8(),
            "D:\\libpea256x64\\libpea256x64.dll".toNativeUtf8());
        print("subkey3 = 0x${subkey.toRadixString(16).toUpperCase()}");
        PEA256EncryptBufferEx(
            handle, ArrayEncrypt, 0, ArrayDecrypt, 0, 4, subkey);
        for (var i = 0; i < 4; i++) {
          stdout.write(" ${ArrayDecrypt[i].toRadixString(16).toUpperCase()}");
        }
        print("");
        subkey = PEA256DecryptUserKey(
            handle,
            "".toNativeUtf8(),
            "".toNativeUtf8(),
            "D:\\libpea256x64\\libpea256x64.dll".toNativeUtf8());
        print("subkey3 = 0x${subkey.toRadixString(16).toUpperCase()}");
        PEA256DecryptBufferEx(
            handle, ArrayDecrypt, 0, ArrayEncrypt, 0, 4, subkey);
        for (var i = 0; i < 4; i++) {
          stdout.write(" ${ArrayEncrypt[i].toRadixString(16).toUpperCase()}");
        }
        print("");
        malloc.free(Array);
        malloc.free(ArrayEncrypt);
        malloc.free(ArrayDecrypt);
        PEA256Close(handle);
      } else {
        print("PEA256Open()失败!!!");
      }
    } else {
      print("PEA256Init()失败!!!");
    }
    PEA256Error();
  } else {
    print("Library()失败!!!");
  }
  print("Hello World!!!");
}


使用特权

评论回复

相关帖子

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

本版积分规则

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

1538

主题

21697

帖子

506

粉丝