using System; using System.Collections.Generic; using System.Linq; using System.Runtime.InteropServices; using System.Text; using System.Threading.Tasks; namespace 加密狗 { public enum VikeyType { ViKeyAPP = 0, //实用型加密狗 ViKeySTD = 1, //标准型加密狗 ViKeyNET = 2, //网络型加密狗 ViKeyPRO = 3, //专业型加密狗 ViKeyWEB = 4, //身份认证型加密狗 ViKeyTIME = 5, //时钟型加密狗,内部独立时钟 ViKeyMultiFunctional = 0x0A, //多功能加密狗 支持软件加密 支持文档加密 ViKeyMultiFunctionalTime = 0x0B, //多功能时钟加密狗 ViKeyInvalid //无效类型 }; public enum 返回值 : uint { /// /// 成功 /// VIKEY_SUCCESS = 0x00000000, /// /// 没有找到ViKey加密锁 /// VIKEY_ERROR_NO_VIKEY = 0x80000001, /// /// 密码错误 /// VIKEY_ERROR_INVALID_PASSWORD = 0x80000002, /// /// 请先查找加密锁 /// VIKEY_ERROR_NEED_FIND = 0x80000003, /// /// 无效的句柄 /// VIKEY_ERROR_INVALID_INDEX = 0x80000004, /// /// 数值错误 /// VIKEY_ERROR_INVALID_VALUE = 0x80000005, /// /// 秘钥无效 /// VIKEY_ERROR_INVALID_KEY = 0x80000006, /// /// 读取信息错误 /// VIKEY_ERROR_GET_VALUE = 0x80000007, /// /// 设置信息错误 /// VIKEY_ERROR_SET_VALUE = 0x80000008, /// /// 没有机会 /// VIKEY_ERROR_NO_CHANCE = 0x80000009, /// /// 权限不足 /// VIKEY_ERROR_NO_TAUTHORITY = 0x8000000A, /// /// 地址或长度错误 /// VIKEY_ERROR_INVALID_ADDR_OR_SIZE = 0x8000000B, /// /// 获取随机数错误 /// VIKEY_ERROR_RANDOM = 0x8000000C, /// /// 获取种子错误 /// VIKEY_ERROR_SEED = 0x8000000D, /// /// 通信错误 /// VIKEY_ERROR_CONNECTION = 0x8000000E, /// /// 算法或计算错误 /// VIKEY_ERROR_CALCULATE = 0x8000000F, /// /// 计数器错误 /// VIKEY_ERROR_MODULE = 0x80000010, /// /// 产生密码错误 /// VIKEY_ERROR_GENERATE_NEW_PASSWORD = 0x80000011, /// /// 加密数据错误 /// VIKEY_ERROR_ENCRYPT_FAILED = 0x80000012, /// /// 解密数据错误 /// VIKEY_ERROR_DECRYPT_FAILED = 0x80000013, /// /// ViKey加密锁已经被锁定 /// VIKEY_ERROR_ALREADY_LOCKED = 0x80000014, /// /// 无效的命令 /// VIKEY_ERROR_UNKNOWN_COMMAND = 0x80000015, /// /// 当前ViKey加密锁不支持此功能 /// VIKEY_ERROR_NO_SUPPORT = 0x80000016, /// /// 发生异常 /// VIKEY_ERROR_CATCH = 0x80000017, /// /// 未知错误 /// VIKEY_ERROR_UNKNOWN_ERROR = 0xFFFFFFFF, } internal class 加密狗API类 { /// /// 查找加密锁。使用其他API前必须先调用次函数。 /// /// [out] 如果查找到系统中存在加密狗,返回查找到加密狗的个数 /// 0表示系统中存在ViKey加密狗。 [DllImport("ViKey.dll")] public static extern uint VikeyFind(out uint pdwCount); /// /// 获取加密狗的硬件ID,加密狗的硬件ID是加密狗的唯一标识,每个加密狗的硬件ID都不一样。 /// /// [in]指定要操作加密狗的序号 /// [out]返回加密狗的硬件ID /// [DllImport("ViKey.dll")] public static extern uint VikeyGetHID(ushort Index, out uint pdwHID); /// /// 获取加密狗的当前权限 /// /// 指定要操作加密狗的序号 /// 返回加密狗的当前权限 0表示加密狗尚未登录 1表示加密狗是用户权限 2表示加密狗是管理员权限 /// [DllImport("ViKey.dll", CallingConvention = CallingConvention.StdCall)] public static extern uint VikeyGetLevel(ushort Index, out byte pLevel); /// /// 以用户权限登录加密狗 /// /// /// /// [DllImport("ViKey.dll", CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Ansi)] public static extern uint VikeyUserLogin(ushort Index, string pUserPassushort); /// /// 以管理员权限登录加密狗 /// /// /// /// [DllImport("ViKey.dll", CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Ansi)] public static extern uint VikeyAdminLogin(ushort Index, string pAdminPassushort); /// /// 注销登录加密狗 注销后的加密狗权限为0 /// /// [in]指定要操作加密狗的序号 /// [DllImport("ViKey.dll", CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Ansi)] public static extern uint VikeyLogoff(ushort Index); [StructLayout(LayoutKind.Sequential, Pack = 1)] public struct SVikeyTime { public byte cYear; public byte cMonth; public byte cDay; public byte cHour; public byte cMinute; public byte cSecond; } /// /// 获取时钟型加密狗中的内部独立时间 /// /// /// /// [DllImport("ViKey.dll", CallingConvention = CallingConvention.StdCall)] public static extern uint VikeyGetTime(ushort Index, out SVikeyTime pTime); /// /// 获取时钟型加密狗中的到期时间 /// /// /// /// [DllImport("ViKey.dll", CallingConvention = CallingConvention.StdCall)] public static extern uint VikeyGetValidTime(ushort Index, out SVikeyTime pTime); /// /// 检测时钟型加密狗的时钟功能是否到期 /// /// [in]指定要操作加密狗的序号 /// [out]返回是否到期结果 1表示没有到期 0表示已经到期 /// [DllImport("ViKey.dll", CallingConvention = CallingConvention.StdCall)] public static extern uint VikeyCheckValidTime(ushort Index, out byte pIsValid); /// /// 从加密狗中的获取4个双字的随机数数据 /// /// 指定要操作加密狗的序号 /// /// /// /// /// [DllImport("ViKey.dll", CallingConvention = CallingConvention.StdCall)] public static extern uint ViKeyRandom(ushort Index, out ushort pwRandom1, out ushort pwRandom2, out ushort pwRandom3, out ushort pwRandom4); [DllImport("ViKey.dll", CallingConvention = CallingConvention.StdCall)] public static extern uint VikeyReadData(ushort Index, ushort Addr, ushort Length, byte[] buffer); [DllImport("ViKey.dll", CallingConvention = CallingConvention.StdCall)] public static extern uint VikeyWriteData(ushort Index, ushort Addr, ushort Length, byte[] buffer); } }