Example #1
0
        //设置8个MD5校验密匙
        public bool SetMd5Key(out string msg)
        {
            msg = string.Empty;
            if (ET99_API.dogHandle == System.IntPtr.Zero)
            {
                msg = "请先打开设备!";
                return(false);
            }

            string strMd5Key = Properties.Resources.HMAC_MD5;//需要写入的KEY

            byte[] bytShortKey = System.Text.Encoding.ASCII.GetBytes(strMd5Key);
            for (int keyid = 1; keyid <= 8; keyid++)//循环写入Md5Key
            {
                byte[] randombuffer = new byte[51];
                byte   keylen       = byte.Parse(strMd5Key.Length.ToString());
                byte   randomlen    = 51;

                byte[] sbMd5Key = new byte[32];
                byte[] sbdigest = new byte[16];

                //第一个参数是随机数,在设置密钥时没有作用
                //第二个参数是随机数长度,在设置密钥时没有作用
                //第三个参数是分配给客户的密钥
                //第四个参数是分配给客户的密钥的长度
                //第五个参数是返回的32字节的密钥,用于存到锁内
                //第六个参数在设置密钥时没有作用
                uint result = ET99_API.MD5_HMAC(randombuffer, randomlen, bytShortKey, keylen, sbMd5Key, sbdigest);
                result = ET99_API.et_SetKey(ET99_API.dogHandle, keyid, sbMd5Key);
                if (result == ET99_API.ET_SUCCESS)
                {
                    msg = "设置8个MD5校验密匙成功!";
                }
                else
                {
                    msg = string.Format("设置第{0}个MD5校验密匙失败!错误:{1}", keyid, ET99_API.ShowResultText(result));
                    return(false);
                }
            }
            return(true);
        }
Example #2
0
        /// <summary>
        /// 软件计算HMAC_MD5
        /// 加密狗中可存储8个32字节HMAC_MD5密钥(每一个密钥都是由1个16字节密钥种子重复一次而成,这里存储的是8个16字节‘密钥种子’)
        /// </summary>
        /// <param name="MD5KeyIndexInDog">密钥index[范围1~8,对应加密狗中密钥存储范围1~8]</param>
        /// <param name="origin">原始字串</param>
        /// <returns>加密后字串</returns>
        public string HMAC_MD5_soft(int MD5KeyIndexInDog, string origin)
        {
            string strMD5Key = Properties.Resources.HMAC_MD5;

            byte[] bytRandomCode = new byte[origin.Length];        //第一个参数是随机数
            bytRandomCode = System.Text.Encoding.ASCII.GetBytes(origin);
            byte randomlen = byte.Parse(origin.Length.ToString()); //第二个参数是随机数长度

            byte[] bytShortKey = new byte[strMD5Key.Length];       //第三个参数是分配给客户的密钥
            bytShortKey = System.Text.Encoding.ASCII.GetBytes(strMD5Key);
            byte keylen = byte.Parse(strMD5Key.Length.ToString()); //第四个参数是分配给客户的密钥的长度

            byte[] sbMd5Key = new byte[32];                        //第五个参数没有作用
            byte[] sbdigest = new byte[16];                        //第六个参数为软件计算的结果

            //第一个参数是随机数
            //第二个参数是随机数长度
            //第三个参数是分配给客户的密钥
            //第四个参数是分配给客户的密钥的长度
            //第五个参数没有作用
            //第六个参数为软件计算的结果
            uint result = ET99_API.MD5_HMAC(bytRandomCode, randomlen, bytShortKey, keylen, sbMd5Key, sbdigest);

            if (result == ET99_API.ET_SUCCESS)
            {
                //string strSoftDigest = string.Empty;
                //for (int i = 0; i < 16; i++)
                //    strSoftDigest += string.Format("{0:X2}", sbdigest[i]);
                //return strSoftDigest;
                return(System.Text.Encoding.Default.GetString(sbdigest));
            }
            else//失败
            {
                return("软件计算失败");
            }
        }