コード例 #1
0
        /// <summary>
        /// 打开并以用户权限进入加密狗
        /// </summary>
        /// <param name="errMsg"></param>
        public static bool OpenDog(out string errMsg)
        {
            errMsg = string.Empty;
            int index = 1;//默认仅打开第一个加密狗

            byte[] bytPID = new byte[8];
            bytPID = System.Text.Encoding.ASCII.GetBytes(Properties.Resources.PID);
            uint result = ET99_API.et_OpenToken(ref ET99_API.dogHandle, bytPID, index);

            if (result == ET99_API.ET_SUCCESS)//打开成功
            {
                byte[] bytPIN = new byte[16];
                bytPIN = System.Text.Encoding.ASCII.GetBytes(Properties.Resources.UserPIN);
                result = ET99_API.et_Verify(ET99_API.dogHandle, ET99_API.ET_VERIFY_USERPIN, bytPIN);
                if (result == ET99_API.ET_SUCCESS)
                {
                    return(true);
                }
                else
                {
                    errMsg = string.Format("加密狗认证失败,请检查!\r\n错误:{0}",
                                           ET99_API.ShowResultText(result));
                    return(false);
                }
            }
            else
            {
                errMsg = string.Format("打开加密狗失败,请检查!\r\n错误:{0}",
                                       ET99_API.ShowResultText(result));
                return(false);
            }
        }
コード例 #2
0
        /// <summary>
        /// 临时获得管理员权限,写入数据到加密狗,然后返回到用户权限
        /// </summary>
        /// <param name="origin">欲写入的原始字串</param>
        /// <param name="offset">偏移字节地址</param>
        public static void TempAdminWriteDog(string origin, int offset)
        {
            //因为此函数的调用前提是通过校验了的狗,省略相关校验,加速
            //获取SOPIN
            string sopin = Helper.ReadOffsetDataAndDecrypt(0, 32);

            //提升管理员权限
            byte[] bytPIN = new byte[16];
            bytPIN = System.Text.Encoding.ASCII.GetBytes(sopin);
            ET99_API.et_Verify(ET99_API.dogHandle, ET99_API.ET_VERIFY_SOPIN, bytPIN);
            //写入
            int    intRandom     = new Random().Next(1, 9);          //随即取1~8
            string key16         = Helper.HMAC_MD5_dog(intRandom, "武汉创方科技");
            string encryptString = Helper.RC2Encrypt(origin, key16); //密文

            byte[] zyn = System.Text.Encoding.Default.GetBytes(encryptString);
            ET99_API.et_Write(ET99_API.dogHandle, (ushort)offset, zyn.Length, zyn);
            //重新进入用户权限
            bytPIN = System.Text.Encoding.ASCII.GetBytes(Properties.Resources.UserPIN);
            ET99_API.et_Verify(ET99_API.dogHandle, ET99_API.ET_VERIFY_USERPIN, bytPIN);
        }