实例介绍
【实例简介】
【实例截图】
【核心代码】
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using System.Security.Cryptography; using System.Runtime.InteropServices; namespace ET99Tools { public partial class frmET99API : Form { /// <summary> /// 当前打开设备的句柄 /// </summary> private IntPtr hHandle; public frmET99API() { InitializeComponent(); } //查找设备 public void btnFind_Click(object sender, EventArgs e) { string strPID = "D96A93DC";//txtOldPid.Text; byte[] bytPID = new byte[8]; int count = 0; if(strPID.Length!=8) { MessageBox.Show("请输入有效的八位PID!"); return; } bytPID = System.Text.Encoding.ASCII.GetBytes(strPID); uint result = ET99_API.et_FindToken(bytPID, out count); if ( result== ET99_API.ET_SUCCESS) { //MessageBox.Show("找到 " count.ToString() " 个加密狗设备!"); } else { MessageBox.Show("查找加密狗失败!请确认您的PID正确。\r\n\r\n错误:" ET99_API.ShowResultText(result)); } } //打开设备 public bool btnOpen_Click(object sender, EventArgs e) { int index = 1; string strPID = "D96A93DC";//txtOldPid.Text; byte[] bytPID = new byte[8]; //if (strPID.Length != 8) //{ // MessageBox.Show("请输入有效的八位PID!"); // return; //} bytPID = System.Text.Encoding.ASCII.GetBytes(strPID); uint result = ET99_API.et_OpenToken(ref hHandle, bytPID, index); if (result == ET99_API.ET_SUCCESS) { //MessageBox.Show("成功打开第一个加密狗设备!"); //btnOpen.Enabled = false; //btnClose.Enabled = true; return true; } else { //MessageBox.Show("打开加密狗失败!请确认您的PID正确。\r\n\r\n错误:" ET99_API.ShowResultText(result)); return false; } } //关闭设备 public void btnClose_Click(object sender, EventArgs e) { uint result = ET99_API.et_CloseToken(hHandle); if (result == ET99_API.ET_SUCCESS) { MessageBox.Show("成功关闭第一个加密狗设备!"); btnOpen.Enabled = true; btnClose.Enabled = false; hHandle = System.IntPtr.Zero; } else { MessageBox.Show("关闭加密狗失败!\r\n\r\n错误:" ET99_API.ShowResultText(result)); } } //用户身份认证 public bool btnVerify_Click(object sender, EventArgs e) { string strPIN = "0000000000000000";//txtPin.Text; byte[] bytPIN = new byte[16]; int flag = ET99_API.ET_VERIFY_USERPIN; //if (hHandle == System.IntPtr.Zero) //{ // MessageBox.Show("请先打开设备!"); // //return; //} //if (strPIN.Length != 16) //{ // MessageBox.Show("请输入有效的16位密码!"); // //return; //} //if (rdoSoPin.Checked) //{ // flag = ET99_API.ET_VERIFY_SOPIN; //} //else //{ // flag = ET99_API.ET_VERIFY_USERPIN; //} bytPIN = System.Text.Encoding.ASCII.GetBytes(strPIN); uint result = ET99_API.et_Verify(hHandle, flag, bytPIN); if (result == ET99_API.ET_SUCCESS) { //MessageBox.Show("认证成功!进入 " (flag==ET99_API.ET_VERIFY_SOPIN?"超级用户":"普通用户") " 状态。" ); return true; } else { //MessageBox.Show("认证失败!\r\n\r\n错误:" ET99_API.ShowResultText(result)); return false; } } //设置MD5校验密匙 public bool btnSetMd5Key_Click(object sender, EventArgs e) { int keyid = 1; string strMd5Key = "1234567890";//txtMD5Key.Text; byte[] bytShortKey; //if (hHandle == System.IntPtr.Zero) //{ // MessageBox.Show("请先打开设备!"); // return; //} //if (strMd5Key.Length <=0) //{ // MessageBox.Show("请输入有效的KEY!"); // txtMD5Key.Focus(); // return; //} //if (txtKeyID.Text.Length <= 0) //{ // MessageBox.Show("请输入正确的标志位!允许的取值范围1-8。"); // txtKeyID.Focus(); // return; //} //if (!int.TryParse(txtKeyID.Text, out keyid)) //{ // MessageBox.Show("请输入正确的标志位!允许的取值范围1-8。"); // txtKeyID.Focus(); // return; //} //else //{ // if (keyid < 0 && keyid > 9) // { // MessageBox.Show("请输入正确的标志位!允许的取值范围1-8。"); // txtKeyID.Focus(); // return; // } //} //生成需要写入的KEY bytShortKey = new byte[strMd5Key.Length]; bytShortKey = System.Text.Encoding.ASCII.GetBytes(strMd5Key); 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(hHandle, keyid, sbMd5Key); if (result == ET99_API.ET_SUCCESS) { //MessageBox.Show("设置MD5校验密匙成功!"); return true; } else { //MessageBox.Show("设置MD5校验密匙失败!\r\n\r\n错误:" ET99_API.ShowResultText(result)); return false; } } //使用设备进行MD5_HMAC验证计算 public bool btnVerifyMd5HMAC_Click(object sender, EventArgs e) { uint result = 0; string strRandomCode = "00000000";//txtVerifyRandom.Text; byte[] bytRandomCode; byte[] bytDigest = new byte[16]; string strSoftDigest = ""; string strDigest = ""; //if (hHandle == System.IntPtr.Zero) //{ // MessageBox.Show("请先打开设备!"); // //return; //} //if(strRandomCode.Length<=0 && strRandomCode.Length>51) //{ // MessageBox.Show("请输入有效的随机数!允许的长度为:1-51"); // txtVerifyRandom.Focus(); // //return; //} bytRandomCode = new byte[8]; //bytRandomCode = System.Text.Encoding.ASCII.GetBytes(strRandomCode); //txtPin.Clear(); Random rdm = new Random(); int val = rdm.Next(0, 9); for(int i = 0;i< strRandomCode.Length;i ) { bytRandomCode[i] = (byte)val; //txtPin.Text = bytRandomCode[i] " "; } //服务器上软件计算 String strMD5Key = "1234567890";//txtMD5Key.Text; byte[] bytShortKey; bytShortKey = new byte[strMD5Key.Length]; bytShortKey = System.Text.Encoding.ASCII.GetBytes(strMD5Key); byte keylen = byte.Parse(strMD5Key.Length.ToString()); byte randomlen = byte.Parse(strRandomCode.Length.ToString()); byte[] sbMd5Key = new byte[32]; byte[] sbdigest = new byte[16]; //第一个参数是随机数 //第二个参数是随机数长度 //第三个参数是分配给客户的密钥(应该从数据库中取出) //第四个参数是分配给客户的密钥的长度 //第五个参数没有作用 //第六个参数为软件计算的结果 result = ET99_API.MD5_HMAC(bytRandomCode, randomlen, bytShortKey, keylen, sbMd5Key, sbdigest); if (result == ET99_API.ET_SUCCESS) { //显示获取到的SN到文本框中 for (int i = 0; i <16; i) { strSoftDigest = string.Format("{0:X2}", sbdigest[i]); } //softdigest.Text = strSoftDigest; //return true; } else { //MessageBox.Show("操作失败!\r\n\r\n错误:" ET99_API.ShowResultText(result)); //return false; } //硬件中计算 //第一个参数为设备的handle句柄 //第二个参数为硬件中密钥索引 //第三个参数为随机数长度 //第四个参数为随机数 //第五个参数为硬件中计算结果 result = ET99_API.et_HMAC_MD5(hHandle, 1, strRandomCode.Length, bytRandomCode, bytDigest); if (result == ET99_API.ET_SUCCESS) { //显示获取到的SN到文本框中 for (int i = 0; i <16; i) { strDigest = string.Format("{0:X2}", bytDigest[i]); } //txtVerifyResult.Text = strDigest; } else { //MessageBox.Show("操作失败!\r\n\r\n错误:" ET99_API.ShowResultText(result)); } if(strDigest == strSoftDigest) { return true; } else { return false; } } public void frmET99API_Load(object sender, EventArgs e) { //btnOpen_Click(null, null); //btnVerify_Click(null,null); //btnSetMd5Key_Click(null, null); //btnVerifyMd5HMAC_Click(null, null); //if(txtVerifyResult.ToString() == softdigest.ToString()) //{ // label2.Text = "yes"; //} //else //{ // label2.Text = "no"; //} } } }
好例子网口号:伸出你的我的手 — 分享!
小贴士
感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。
- 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
- 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
- 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
- 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。
关于好例子网
本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明
网友评论
我要评论