当前位置: 首页 > news >正文

Desfire Ev1\Ev2\Ev3卡DES\3K3DES\AES加解密读写VB.Net示例源码

本示例使用发卡器:https://item.taobao.com/item.htm?spm=a21dvs.23580594.0.0.1d292c1bSxJTb6&ft=t&id=917152255720

Public Class Form1Public Declare Function pcdbeep Lib "OUR_MIFARE.dll" (ByVal xms As Integer) As BytePublic Declare Function pcdgetdevicenumber Lib "OUR_MIFARE.dll" (ByRef devicenumber As Byte) As BytePublic Declare Function getmifareversion Lib "OUR_MIFARE.dll" (ByRef cardtypestr As Byte, ByRef AtqaSak As Byte, ByRef versionbuf As Byte, ByRef versionlen As Byte, ByRef retsw As Byte) As BytePublic Declare Function cpurequest1 Lib "OUR_MIFARE.dll" (ByRef mypiccserial As Byte, ByRef myparam As Byte, ByRef myver As Byte, ByRef mycode As Byte, ByRef AtqaSak As Byte) As BytePublic Declare Function desfireselectapplication Lib "OUR_MIFARE.dll" (ByRef aid As Byte, ByRef retsw As Byte) As BytePublic Declare Function desfireauthkeyev1 Lib "OUR_MIFARE.dll" (ByRef keybuf As Byte, ByVal keyid As Byte, ByVal authmode As Byte, ByRef retsw As Byte) As BytePublic Declare Function desfirechangekeyev1 Lib "OUR_MIFARE.dll" (ByRef newkeybuf As Byte, ByVal keyid As Byte, ByVal authmode As Byte, ByVal zeno As Byte, ByRef oldkeybuf As Byte, ByRef retsw As Byte) As BytePublic Declare Function desfireauthkeyev2 Lib "OUR_MIFARE.dll" (ByRef keybuf As Byte, ByVal keyid As Byte, ByVal authmode As Byte, ByRef retsw As Byte) As BytePublic Declare Function desfireformatpicc Lib "OUR_MIFARE.dll" (ByRef retsw As Byte) As BytePublic Declare Function desfiredeleteapplication Lib "OUR_MIFARE.dll" (ByRef aid As Byte, ByRef retsw As Byte) As BytePublic Declare Function desfirecreateapplication Lib "OUR_MIFARE.dll" (ByRef aid As Byte, ByVal keysetting As Byte, ByVal keynumver As Byte, ByVal keytype As Byte, ByRef retsw As Byte) As BytePublic Declare Function desfirechangefilesettings Lib "OUR_MIFARE.dll" (ByVal fileid As Byte, ByVal comset As Byte, ByRef accessrights As Byte, ByRef retsw As Byte) As BytePublic Declare Function desfirecreatestddatafile Lib "OUR_MIFARE.dll" (ByVal fileid As Byte, ByVal comset As Byte, ByRef accessrights As Byte, ByVal filesize As Int32, ByRef retsw As Byte) As BytePublic Declare Function desfircreatebackupdatafile Lib "OUR_MIFARE.dll" (ByVal fileid As Byte, ByVal comset As Byte, ByRef accessrights As Byte, ByVal filesize As Int32, ByRef retsw As Byte) As Byte   Public Declare Function desfiregetfilesettings Lib "OUR_MIFARE.dll" (ByVal fileid As Byte, ByRef filesettingsbuf As Byte, ByRef revbuflen As Byte, ByRef retsw As Byte) As BytePublic Declare Function desfiredeletefile Lib "OUR_MIFARE.dll" (ByVal fileid As Byte, ByRef retsw As Byte) As BytePublic Declare Function desfirereaddata Lib "OUR_MIFARE.dll" (ByVal cmd As Byte, ByVal fileno As Byte, ByVal offset As Int32, ByVal datalen As Int32, ByRef databuf As Byte, ByRef retsw As Byte) As BytePublic Declare Function desfirewritedata Lib "OUR_MIFARE.dll" (ByVal cmd As Byte, ByVal fileno As Byte, ByVal offset As Int32, ByVal datalen As Int32, ByRef databuf As Byte, ByRef retsw As Byte) As BytePublic Declare Function desfiregetfileids Lib "OUR_MIFARE.dll" (ByRef fileidbuf As Byte, ByRef fidsize As Byte, ByRef retsw As Byte) As BytePublic Declare Function desfiregetapplicationids Lib "OUR_MIFARE.dll" (ByRef aidbuf As Byte, ByRef aidsize As Byte, ByRef retsw As Byte) As BytePublic Declare Function desfiregetkeysettings Lib "OUR_MIFARE.dll" (ByRef aidbuf As Byte, ByRef keysetting As Byte, ByRef keysize As Byte, ByRef retsw As Byte) As BytePublic Declare Function desfirechangekeysettings Lib "OUR_MIFARE.dll" (ByRef aidbuf As Byte, ByVal keysetting As Byte, ByRef retsw As Byte) As BytePrivate Sub MessageDispInfo(errno As Byte)  '函数返回状态解析Select Case errnoCase 0MessageBox.Show("操作成功!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information)Case 8MessageBox.Show("请重新拿开卡后再放到感应区!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Error)Case 23MessageBox.Show("错误代码:" + errno.ToString("D") + ",驱动程序错误或尚未安装!", "示例提示", MessageBoxButtons.OK, MessageBoxIcon.Error)Case 24MessageBox.Show("错误代码:" + errno.ToString("D") + ",操作超时,一般是动态库没有反映!", "示例提示", MessageBoxButtons.OK, MessageBoxIcon.Error)Case 25MessageBox.Show("错误代码:" + errno.ToString("D") + ",发送字数不够!", "示例提示", MessageBoxButtons.OK, MessageBoxIcon.Error)Case 26MessageBox.Show("错误代码:" + errno.ToString("D") + ",发送的CRC错!", "示例提示", MessageBoxButtons.OK, MessageBoxIcon.Error)Case 27MessageBox.Show("错误代码:" + errno.ToString("D") + ",接收的字数不够!", "示例提示", MessageBoxButtons.OK, MessageBoxIcon.Error)Case 28MessageBox.Show("错误代码:" + errno.ToString("D") + ",接收的CRC错!", "示例提示", MessageBoxButtons.OK, MessageBoxIcon.Error)Case 50MessageBox.Show("RATS错误,厂家调试代码,用户不需理会!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Error)Case 51MessageBox.Show("PPS错误,厂家调试代码,用户不需理会!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Error)Case 52MessageBox.Show("已进入了14443-4协议状态,可进行CPU卡功能所有操作了!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Error)Case 53MessageBox.Show("CPU卡功能通讯错误!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Error)Case 54MessageBox.Show("数据不足,需要接着发送未完成的数据至卡上!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Error)Case 55MessageBox.Show("发送ACK指令给卡,让卡接着发送数据回来!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Error)Case 56MessageBox.Show("清空根目录失败!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Error)Case 57MessageBox.Show("卡片不支持功能!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Error)Case 58MessageBox.Show("卡片初始化失败!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Error)Case 59MessageBox.Show("分配的空间不足!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Error)Case 60MessageBox.Show("本次操作的实体已存在!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Error)Case 61MessageBox.Show("无足够空间!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Error)Case 62MessageBox.Show("文件不存在!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Error)Case 63MessageBox.Show("权限不足,有可能是用只读密码认证,导致无法更改读写密码或无法写文件!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Error)Case 64MessageBox.Show("密码不存在,或密钥文件未创建!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Error)Case 65MessageBox.Show("传送长度错误!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Error)Case 66MessageBox.Show("Le错误,即接收的数据长度指定过大!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Error)Case 67MessageBox.Show("功能不支持或卡中无MF 或卡片已锁定!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Error)Case 68MessageBox.Show("密码认证错识次数过多,该密码已被锁死!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Error)Case 86MessageBox.Show("更改后的密码长度必须和创建时的长度一致!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Error)Case 87MessageBox.Show("应用目录不存在!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Error)Case 88MessageBox.Show("应用文件不存在!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Error)Case 89MessageBox.Show("文件号不能超过5!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Error)Case 90MessageBox.Show("读取文件时返回的长度不足,数据可能不正确!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Error)Case 91MessageBox.Show("一次读文件的长度不能超过255!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Error)Case 92MessageBox.Show("一次写文件的长度不能超过247!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Error)Case 70Case 71Case 72Case 73Case 74Case 75Case 76Case 77Case 78Case 79Case 80Case 81Case 82Case 83Case 84Case 85MessageBox.Show("密码错误,剩余次数为" + Convert.ToString(errno - 70) + ",如果为0,该密码将锁死,无法再认证", "提示", MessageBoxButtons.OK, MessageBoxIcon.Error)Case ElseMessageBox.Show("操作失败,返回错误代码!" + Convert.ToString(errno), "警告", MessageBoxButtons.OK, MessageBoxIcon.Error)End SelectEnd SubFunction RetTextFromStr(ByVal inputstr As String) As String '卡操作返回代码解析RetTextFromStr = ""Select Case inputstrCase "9000"RetTextFromStr = "成功!"Case "9100"RetTextFromStr = "成功!"pcdbeep(20)Case "6281"RetTextFromStr = "回送的数据可能错误!"Case "6283"RetTextFromStr = "选择文件无效,文件或密钥校验错误"Case "6400"RetTextFromStr = "状态标志未改变"Case "6581"RetTextFromStr = "写 EEPROM 不成功!"Case "6700"RetTextFromStr = "长度错误"Case "6900"RetTextFromStr = "CLA 与线路保护要求不匹配"Case "6901"RetTextFromStr = "无效的状态!"Case "6981"RetTextFromStr = "命令与文件结构不相容"Case "6982"RetTextFromStr = "不满足安全状态"Case "6983"RetTextFromStr = "密钥被锁死!"Case "6984"RetTextFromStr = "MAC格式不符合"Case "6985"RetTextFromStr = "使用条件不满足"Case "6986"RetTextFromStr = "请先选择文件!"Case "6987"RetTextFromStr = "无安全报文"Case "6988"RetTextFromStr = "安全报文数据项不正确"Case "6A80"RetTextFromStr = "数据域参数错误!"Case "6A81"RetTextFromStr = "功能不支持或卡中无MF 或卡片已锁定"Case "6A82"RetTextFromStr = "文件未找到"Case "6A83"RetTextFromStr = "记录未找到!"Case "6A84"RetTextFromStr = "文件无足够空间"Case "6A86"RetTextFromStr = "参数P1 P2 错"Case "6A88"RetTextFromStr = "密钥未找到!"Case "6B00"RetTextFromStr = "在达到Le/Lc 字节之前文件结束,偏移量错误"Case "6E00"RetTextFromStr = "无效的CLA"Case "6F00"RetTextFromStr = "数据无效!"Case "9302"RetTextFromStr = "MAC 错误"Case "9303"RetTextFromStr = "应用已被锁定"Case "9401"RetTextFromStr = "金额不足!"Case "9403"RetTextFromStr = "密钥未找到!"Case "9406"RetTextFromStr = "所需的MAC 不可用!"Case "91AE"RetTextFromStr = "认证失败,请检查命行的参数和前期计算是否错误!"Case "91CA"RetTextFromStr = "上一个命令未完全完成!"Case "917E"RetTextFromStr = "指令长度错误!"Case "9140"RetTextFromStr = "当前目录或应用密钥不存在,请先选择正确的目录或应用!"Case "919D"RetTextFromStr = "处于未验证密码的状态,该指令无法操作!"Case "911E"RetTextFromStr = "MAC错误!"Case "91F0"RetTextFromStr = "该文件号不存在!"Case "919E"RetTextFromStr = "参数无效!"Case "91BE"RetTextFromStr = "试图读取/写入的数据超出文件/记录的边界!"Case "91A0"RetTextFromStr = "请求的 AID 不存在!"Case ElseIf inputstr.Substring(0, 3) = "63C" ThenDim i As Integer = Convert.ToInt16(inputstr.Substring(3, 1), 16)If i > 0 ThenRetTextFromStr = "再试 " + i.ToString("D") + " 次错误密码将锁定!"ElseRetTextFromStr = "密码已被锁定"End IfElseRetTextFromStr = "未知的异常"End IfEnd SelectReturn RetTextFromStrEnd FunctionFunction checkhexstr(ByVal inputstr As String, ByVal hexlen As Integer, ByRef bytebuf() As Byte) As Boolean  '判断16进制字符串数据是否正确Tryinputstr = inputstr.Replace(" ", "")     '去除空格inputstr = inputstr.Replace(vbCrLf, "")  '去除回车换行符inputstr = inputstr.Replace(vbLf, "")inputstr = inputstr.Replace(vbCr, "")Dim i As IntegerFor i = 0 To hexlen - 1bytebuf(i) = Convert.ToByte(Convert.ToInt32(inputstr.Substring(i * 2, 2), 16))NextReturn TrueCatch ex As ExceptionReturn FalseEnd TryEnd FunctionPrivate Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.LoadcomboBox1.SelectedIndex = 0comboBox3.SelectedIndex = 0comboBox14.SelectedIndex = 0comboBox2.SelectedIndex = 0comboBox4.SelectedIndex = 0comboBox5.SelectedIndex = 1comboBox6.SelectedIndex = 1comboBox7.SelectedIndex = 1comboBox8.SelectedIndex = 1comboBox9.SelectedIndex = 0comboBox10.SelectedIndex = 14comboBox11.SelectedIndex = 14comboBox12.SelectedIndex = 14comboBox13.SelectedIndex = 14End SubPrivate Sub comboBox1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles comboBox1.SelectedIndexChangedSelect comboBox1.SelectedIndex            Case 0textBox3.Text = "00 00 00 00 00 00 00 00"Case 1textBox3.Text = "00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00"Case 2textBox3.Text = "00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00"Case ElsetextBox3.Text = "00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00"End SelectEnd SubPrivate Sub comboBox3_SelectedIndexChanged(sender As Object, e As EventArgs) Handles comboBox3.SelectedIndexChangedSelect comboBox3.SelectedIndexCase 0textBox3.Text = "00 00 00 00 00 00 00 00"textBox4.Text = "00 00 00 00 00 00 00 00"Case 1textBox3.Text = "00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00"textBox4.Text = "00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00"Case 2textBox3.Text = "00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00"textBox4.Text = "00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00"Case ElsetextBox3.Text = "00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00"textBox4.Text = "00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00"End SelectEnd SubPrivate Sub button4_Click(sender As Object, e As EventArgs) Handles button4.ClickDim xms As Integerxms = 50Dim status As Byte = pcdbeep(xms)If status <> 0 ThenMessageDispInfo(status)End IfEnd SubPrivate Sub button8_Click(sender As Object, e As EventArgs) Handles button8.ClickDim status As Byte   '存放返回值Dim devno(3) As Byte '设备编号status = pcdgetdevicenumber(devno(0))If status = 0 ThenMsgBox("设备编号:" + devno(0).ToString("D3") + "-" + devno(1).ToString("D3") + "-" + devno(2).ToString("D3") + "-" + devno(3).ToString("D3"), vbInformation + vbOKOnly, "提示")ElseMessageDispInfo(status)End IfEnd SubPrivate Sub button7_Click(sender As Object, e As EventArgs) Handles button7.ClickDim AtqaSak(3) As ByteDim retsw(1) As ByteDim versionbuf(100) As ByteDim versionlen(2) As ByteDim cardtypebuf(1024) As ByteDim status As Byte = getmifareversion(cardtypebuf(0), AtqaSak(0), versionbuf(0), versionlen(0), retsw(0))Dim cardtypestr As String = System.Text.Encoding.ASCII.GetString(cardtypebuf).Trim()Dim retstr As String = retsw(0).ToString("X2") + retsw(1).ToString("X2")If status > 0 ThenMessageDispInfo(status)ElseMessageBox.Show("获取IC卡芯片型号操作,卡片返回代码:" + retstr + vbCrLf + "型号:" + cardtypestr, "提示", MessageBoxButtons.OK, MessageBoxIcon.Information)End IfEnd SubPrivate Sub button1_Click(sender As Object, e As EventArgs) Handles button1.ClickDim mypiccserial(7) As ByteDim myparam(4) As ByteDim AtqaSak(3) As ByteDim myver(1) As ByteDim mycode(1) As ByteDim cardhohex As String = ""Dim parastr As String = ""Dim verstr As String = ""Dim codestr As String = ""Dim i As IntegerDim status As Byte = cpurequest1(mypiccserial(0), myparam(0), myver(0), mycode(0), AtqaSak(0))If status = 0 Or status = 52 Thenpcdbeep(20)If AtqaSak(0) \ 64 > 0 ThenFor i = 0 To 6cardhohex = cardhohex + mypiccserial(i).ToString("X2")NextFor i = 0 To 3parastr = parastr + myparam(i).ToString("X2")Nextverstr = myver(0).ToString("X2")codestr = mycode(0).ToString("X2")textBox1.Text = cardhohexMessageBox.Show("激活Desfire卡成功,可以接着重复操作第二步进行调试了。" + vbCrLf + "16进制卡号:" + cardhohex + vbCrLf + "参数:" + parastr + vbCrLf + "版本信息:" + verstr + vbCrLf + "厂商代码(复旦为90):" + codestr, "提示", MessageBoxButtons.OK, MessageBoxIcon.Information)ElseFor i = 0 To 3cardhohex = cardhohex + mypiccserial(i).ToString("X2")NextFor i = 0 To 3parastr = parastr + myparam(i).ToString("X2")Nextverstr = myver(0).ToString("X2")codestr = mycode(0).ToString("X2")textBox1.Text = cardhohexMessageBox.Show("激活FM1208CPU卡成功,可以接着重复操作第二步进行调试了。" + vbCrLf + "16进制卡号:" + cardhohex + vbCrLf + "参数:" + parastr + vbCrLf + "版本信息:" + verstr + vbCrLf + "厂商代码(复旦为90):" + codestr, "提示", MessageBoxButtons.OK, MessageBoxIcon.Information)End IfElseMessageDispInfo(status)End IfEnd SubPrivate Sub button2_Click(sender As Object, e As EventArgs) Handles button2.ClickDim aidbuf(3) As ByteDim retsw(1) As ByteDim retstr As String = ""If Not checkhexstr(textBox2.Text.Trim(), 3, aidbuf) ThenMessageBox.Show("十六进制AID输入错误,请输入3字节的16进制AID!", "警告", MessageBoxButtons.OK, MessageBoxIcon.Error)ReturnEnd IfDim status As Byte = desfireselectapplication(aidbuf(0), retsw(0))retstr = retsw(0).ToString("X2") + retsw(1).ToString("X2")If status > 0 ThenMessageBox.Show("选择卡内应用AID操作返回异常:" + status.ToString("D") + ",卡片返回代码:" + retstr + ",说明:" + RetTextFromStr(retstr), "提示", MessageBoxButtons.OK, MessageBoxIcon.Error)ElseMessageBox.Show("选择卡内应用AID操作卡片返回代码:" + retstr + ",说明:" + RetTextFromStr(retstr), "提示", MessageBoxButtons.OK, MessageBoxIcon.Information)End IfEnd SubPrivate Sub button6_Click(sender As Object, e As EventArgs) Handles button6.ClickDim newkeybuf(24) As ByteDim oldkeybuf(24) As ByteDim retsw(1) As ByteDim retstr As StringDim keylen As IntegerSelect Case comboBox3.SelectedIndexCase 0keylen = 8Case 1keylen = 16Case 2keylen = 24Case Elsekeylen = 16End SelectIf Not checkhexstr(textBox4.Text.Trim(), keylen, newkeybuf) ThenMessageBox.Show("十六进制新密钥输入错误,请输入 " + keylen.ToString("D") + " 字节的16进制新密钥!", "警告", MessageBoxButtons.OK, MessageBoxIcon.Error)ReturnEnd IfIf Not checkhexstr(textBox3.Text.Trim(), keylen, oldkeybuf) ThenMessageBox.Show("十六进制旧密钥输入错误,请输入 " + keylen.ToString("D") + " 字节的16进制旧密钥!", "警告", MessageBoxButtons.OK, MessageBoxIcon.Error)ReturnEnd IfDim status As Byte = desfirechangekeyev1(newkeybuf(0), Convert.ToByte(keyid.Value), Convert.ToByte(comboBox3.SelectedIndex), 0, oldkeybuf(0), retsw(0))retstr = retsw(0).ToString("X2") + retsw(1).ToString("X2")If status > 0 ThenMessageBox.Show("EV1更改密码操作返回异常:" + status.ToString("D") + ",卡片返回代码:" + retstr + ",说明:" + RetTextFromStr(retstr), "提示", MessageBoxButtons.OK, MessageBoxIcon.Error)ElseMessageBox.Show("EV1更改密码操作,卡片返回代码:" + retstr + ",说明:" + RetTextFromStr(retstr), "提示", MessageBoxButtons.OK, MessageBoxIcon.Information)End IfEnd SubPrivate Sub button3_Click(sender As Object, e As EventArgs) Handles button3.ClickDim authkeybuf(24) As ByteDim retsw(1) As ByteDim retstr As StringDim keylen As IntegerSelect Case comboBox1.SelectedIndexCase 0keylen = 8Case 1keylen = 16Case 2keylen = 24Case Elsekeylen = 16End SelectIf Not checkhexstr(textBox3.Text.Trim(), keylen, authkeybuf) ThenMessageBox.Show("十六进制认证密钥输入错误,请输入 " + keylen.ToString("D") + " 字节的16进制认证密钥!", "警告", MessageBoxButtons.OK, MessageBoxIcon.Error)ReturnEnd IfDim status As Byte = desfireauthkeyev1(authkeybuf(0), Convert.ToByte(keyid.Value), Convert.ToByte(comboBox1.SelectedIndex), retsw(0))retstr = retsw(0).ToString("X2") + retsw(1).ToString("X2")If (status > 0) ThenMessageBox.Show("认证密码操作返回异常:" + status.ToString("D") + ",卡片返回代码:" + retstr + ",说明:" + RetTextFromStr(retstr), "提示", MessageBoxButtons.OK, MessageBoxIcon.Error)ElseMessageBox.Show("认证密码操作,卡片返回代码:" + retstr + ",说明:" + RetTextFromStr(retstr), "提示", MessageBoxButtons.OK, MessageBoxIcon.Information)End IfEnd SubPrivate Sub button18_Click(sender As Object, e As EventArgs) Handles button18.ClickDim authkeybuf(24) As ByteDim retsw(1) As ByteDim retstr As StringDim keylen As Integer = 16If Not checkhexstr(textBox6.Text.Trim(), keylen, authkeybuf) ThenMessageBox.Show("十六进制认证密钥输入错误,请输入 " + keylen.ToString("D") + " 字节的16进制认证密钥!", "警告", MessageBoxButtons.OK, MessageBoxIcon.Error)ReturnEnd IfDim status As Byte = desfireauthkeyev2(authkeybuf(0), Convert.ToByte(keyid.Value), Convert.ToByte(comboBox4.SelectedIndex), retsw(0))retstr = retsw(0).ToString("X2") + retsw(1).ToString("X2")If (status > 0) ThenMessageBox.Show("认证密码操作返回异常:" + status.ToString("D") + ",卡片返回代码:" + retstr + ",说明:" + RetTextFromStr(retstr), "提示", MessageBoxButtons.OK, MessageBoxIcon.Error)ElseMessageBox.Show("认证密码操作,卡片返回代码:" + retstr + ",说明:" + RetTextFromStr(retstr), "提示", MessageBoxButtons.OK, MessageBoxIcon.Information)End IfEnd SubPrivate Sub button5_Click(sender As Object, e As EventArgs) Handles button5.ClickDim retsw(1) As ByteDim retstr As StringDim status As Byte = desfireformatpicc(retsw(0))retstr = retsw(0).ToString("X2") + retsw(1).ToString("X2")If status > 0 ThenMessageBox.Show("初始格式化卡操作返回异常:" + status.ToString("D") + ",卡片返回代码:" + retstr + ",说明:" + RetTextFromStr(retstr), "提示", MessageBoxButtons.OK, MessageBoxIcon.Error)ElseMessageBox.Show("初始格式化卡操作,卡片返回代码:" + retstr + ",说明:" + RetTextFromStr(retstr), "提示", MessageBoxButtons.OK, MessageBoxIcon.Information)End IfEnd SubPrivate Sub button10_Click(sender As Object, e As EventArgs) Handles button10.ClickDim aidbuf(3) As ByteDim retsw(1) As ByteDim retstr As StringIf Not checkhexstr(textBox5.Text.Trim(), 3, aidbuf) ThenMessageBox.Show("十六进制AID输入错误,请输入3字节的16进制AID!", "警告", MessageBoxButtons.OK, MessageBoxIcon.Error)ReturnEnd IfDim status As Byte = desfiredeleteapplication(aidbuf(0), retsw(0))retstr = retsw(0).ToString("X2") + retsw(1).ToString("X2")If (status > 0) ThenMessageBox.Show("删除卡内应用操作返回异常:" + status.ToString("D") + ",卡片返回代码:" + retstr + ",说明:" + RetTextFromStr(retstr), "提示", MessageBoxButtons.OK, MessageBoxIcon.Error)ElseMessageBox.Show("删除卡内应用操作卡片返回代码:" + retstr + ",说明:" + RetTextFromStr(retstr), "提示", MessageBoxButtons.OK, MessageBoxIcon.Information)End IfEnd SubPrivate Sub button9_Click(sender As Object, e As EventArgs) Handles button9.ClickDim aidbuf(3) As ByteDim retsw(1) As ByteDim retstr As StringIf Not checkhexstr(textBox5.Text.Trim(), 3, aidbuf) ThenMessageBox.Show("十六进制AID输入错误,请输入3字节的16进制AID!", "警告", MessageBoxButtons.OK, MessageBoxIcon.Error)ReturnEnd IfDim keysetting As Byte = Convert.ToByte(comboBox4.SelectedIndex * 16 + comboBox5.SelectedIndex * 8 + comboBox6.SelectedIndex * 4 + comboBox7.SelectedIndex * 2 + comboBox8.SelectedIndex)Dim status As Byte = desfirecreateapplication(aidbuf(0), keysetting, Convert.ToByte(keynumber.Value), Convert.ToByte(comboBox2.SelectedIndex), retsw(0))retstr = retsw(0).ToString("X2") + retsw(1).ToString("X2")If (status > 0) ThenMessageBox.Show("创建新应用操作返回异常:" + status.ToString("D") + ",卡片返回代码:" + retstr + ",说明:" + RetTextFromStr(retstr), "提示", MessageBoxButtons.OK, MessageBoxIcon.Error)ElseMessageBox.Show("创建新应用操作卡片返回代码:" + retstr + ",说明:" + RetTextFromStr(retstr), "提示", MessageBoxButtons.OK, MessageBoxIcon.Information)End IfEnd SubPrivate Sub button11_Click(sender As Object, e As EventArgs) Handles button11.ClickDim status As Byte           '函数返回值Dim comset As Byte           '通讯模式Dim accessrights(1) As Byte  '文件访问时的密钥认证方式Dim retsw(1) As ByteDim retstr As StringDim filebytes As Int32 = Convert.ToInt32(filesize.Value)If (comboBox9.SelectedIndex < 2) Thencomset = Convert.ToByte(comboBox9.SelectedIndex)Elsecomset = 3End Ifaccessrights(1) = Convert.ToByte(comboBox10.SelectedIndex * 16 + comboBox11.SelectedIndex)accessrights(0) = Convert.ToByte(comboBox12.SelectedIndex * 16 + comboBox13.SelectedIndex)If (radioButton1.Checked) Thenstatus = desfirecreatestddatafile(Convert.ToByte(fileid.Value), comset, accessrights(0), filebytes, retsw(0))Elsestatus = desfircreatebackupdatafile(Convert.ToByte(fileid.Value), comset, accessrights(0), filebytes, retsw(0))End Ifretstr = retsw(0).ToString("X2") + retsw(1).ToString("X2")If status = 53 ThenMessageBox.Show("在应用内创建新文件操作返回异常:" + status.ToString("D") + ",说明:CPU卡功能通讯错误,可能是卡拿开重放后未激活或卡不在感应区!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Error)ReturnElseIf status = 64 ThenIf (retstr = "91DE") ThenMessageBox.Show("在应用内创建新文件操作返回异常:" + status.ToString("D") + ",卡片返回代码:" + retstr + ",可能的原因:1 应用没选择对,2 密码未认证,3 文件已存在!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Error)ReturnElseMessageBox.Show("在应用内创建新文件操作返回异常:" + status.ToString("D") + ",卡片返回代码:" + retstr + ",请选择正确的应用!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Error)ReturnEnd IfElseIf (status > 0) ThenMessageBox.Show("在应用内创建新文件操作返回异常:" + status.ToString("D") + ",卡片返回代码:" + retstr + ",说明:" + RetTextFromStr(retstr), "提示", MessageBoxButtons.OK, MessageBoxIcon.Error)ReturnEnd IfMessageBox.Show("在应用内创建新文件操作卡片返回代码:" + retstr + ",说明:" + RetTextFromStr(retstr), "提示", MessageBoxButtons.OK, MessageBoxIcon.Information)End SubPrivate Sub button12_Click(sender As Object, e As EventArgs) Handles button12.ClickDim revbuflen(4) As ByteDim filesettingsbuf(32) As ByteDim retsw(1) As ByteDim retstr As StringDim revstr As String = ""Dim status As Byte = desfiregetfilesettings(Convert.ToByte(fileid.Value), filesettingsbuf(0), revbuflen(0), retsw(0))retstr = retsw(0).ToString("X2") + retsw(1).ToString("X2")If (status > 0) ThenMessageBox.Show("读取文件配置信息返回异常:" + status.ToString("D") + ",卡片返回代码:" + retstr + ",说明:" + RetTextFromStr(retstr), "提示", MessageBoxButtons.OK, MessageBoxIcon.Error)ReturnEnd IfDim revlen As ULong = BitConverter.ToInt32(revbuflen, 0)Dim j As ULongFor j = 0 To revlen - 1revstr = revstr + filesettingsbuf(j).ToString("X2")NextIf filesettingsbuf(1) Mod 4 = 3 Then                 '解析通信模式comboBox9.SelectedIndex = 2ElseIf (filesettingsbuf(1) Mod 4 = 1) ThencomboBox9.SelectedIndex = 1ElsecomboBox9.SelectedIndex = 0End IfEnd IfcomboBox10.SelectedIndex = filesettingsbuf(3) \ 16     '只读时需要的密码号comboBox11.SelectedIndex = filesettingsbuf(3) Mod 16   '只写时需要的密码号comboBox12.SelectedIndex = filesettingsbuf(2) \ 16     '读写时需要的密码号comboBox13.SelectedIndex = filesettingsbuf(2) Mod 16   '更改本配置时需要的密码号filesize.Value = filesettingsbuf(4) + filesettingsbuf(5) * 256 + filesettingsbuf(6) * 65536MessageBox.Show("读取文件配置返回代码:" + retstr + ",说明:" + RetTextFromStr(retstr) + ",16进制文件配置信息:" + revstr, "提示", MessageBoxButtons.OK, MessageBoxIcon.Information)End SubPrivate Sub button14_Click(sender As Object, e As EventArgs) Handles button14.ClickDim retsw(1) As ByteDim retstr As StringDim status As Byte = desfiredeletefile(Convert.ToByte(fileid.Value), retsw(0))retstr = retsw(0).ToString("X2") + retsw(1).ToString("X2")If (status > 0) ThenMessageBox.Show("删除文件操作返回异常:" + status.ToString("D") + ",卡片返回代码:" + retstr + ",说明:" + RetTextFromStr(retstr), "提示", MessageBoxButtons.OK, MessageBoxIcon.Error)ElseMessageBox.Show("删除文件操作卡片返回代码:" + retstr + ",说明:" + RetTextFromStr(retstr), "提示", MessageBoxButtons.OK, MessageBoxIcon.Information)End IfEnd SubPrivate Sub button17_Click(sender As Object, e As EventArgs) Handles button17.ClickDim i As Int32 = 0Dim j As Int32 = 0Dim maxnum As Int32 = Convert.ToInt32(rwlen.Value) - 1Dim datastr As String = ""For j = 0 To maxnumdatastr = datastr + i.ToString("X2") + " "i = i + 1If i = 256 Then i = 0NexttextBox8.Text = datastrEnd SubPrivate Sub button15_Click(sender As Object, e As EventArgs) Handles button15.ClickDim cmd As Byte = &HBD      '参数为&HBD表示读数据,为&hBB表示读记录Dim databuf(8192) As ByteDim retsw(1) As ByteDim retstr As StringDim status As Byte = desfirereaddata(cmd, Convert.ToByte(fileid.Value), Convert.ToInt32(rwbegin.Value), Convert.ToInt32(rwlen.Value), databuf(0), retsw(0))retstr = retsw(0).ToString("X2") + retsw(1).ToString("X2")If (status = 63) Then            MessageBox.Show("读文件操作返回异常:" + status.ToString("D") + ",说明:权限不足,请先用正确的密钥号认证!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Error)Return            ElseIf (status > 0) ThenMessageBox.Show("读文件操作返回异常:" + status.ToString("D") + ",卡片返回代码:" + retstr + ",说明:" + RetTextFromStr(retstr), "提示", MessageBoxButtons.OK, MessageBoxIcon.Error)ReturnElseDim datastr As String = ""Dim j As Int32For j = 0 To Convert.ToInt32(rwlen.Value) - 1datastr = datastr + databuf(j).ToString("X2") + " "NexttextBox8.Text = datastrMessageBox.Show("读文件操作卡片返回代码:" + retstr + ",说明:" + RetTextFromStr(retstr), "提示", MessageBoxButtons.OK, MessageBoxIcon.Information)End IfEnd SubPrivate Sub button16_Click(sender As Object, e As EventArgs) Handles button16.ClickDim cmd As Byte = &H3D      '参参数为&H3D表示写数据,为&h3B表示写记录Dim databuf(8192) As ByteDim retsw(1) As ByteIf Not checkhexstr(textBox8.Text.Trim(), Convert.ToInt32(rwlen.Value), databuf) ThenIf (MessageBox.Show("写入数据输入不足或错误,是否要生成写入数据?", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Question) = DialogResult.Yes) Thenbutton17.PerformClick()ReturnEnd IfEnd IfDim status As Byte = desfirewritedata(cmd, Convert.ToByte(fileid.Value), Convert.ToInt32(rwbegin.Value), Convert.ToInt32(rwlen.Value), databuf(0), retsw(0))Dim retstr As String = retsw(0).ToString("X2") + retsw(1).ToString("X2")If (status = 63) ThenMessageBox.Show("写文件操作返回异常:" + status.ToString("D") + ",说明:权限不足,请先用正确的密钥号认证!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Error)ReturnElseIf (status > 0) ThenMessageBox.Show("写文件操作返回异常:" + status.ToString("D") + ",卡片返回代码:" + retstr + ",说明:" + RetTextFromStr(retstr), "提示", MessageBoxButtons.OK, MessageBoxIcon.Error)ReturnElseMessageBox.Show("写文件操作卡片返回代码:" + retstr + ",说明:" + RetTextFromStr(retstr), "提示", MessageBoxButtons.OK, MessageBoxIcon.Information)End IfEnd SubPrivate Sub button13_Click(sender As Object, e As EventArgs) Handles button13.ClickDim status As Byte           '函数返回值Dim comset As Byte           '通讯模式Dim accessrights(1) As Byte  '文件访问时的密钥认证方式Dim retsw(1) As ByteDim retstr As StringIf (comboBox9.SelectedIndex < 2) Thencomset = Convert.ToByte(comboBox9.SelectedIndex)Elsecomset = 3End Ifaccessrights(1) = Convert.ToByte(comboBox10.SelectedIndex * 16 + comboBox11.SelectedIndex)accessrights(0) = Convert.ToByte(comboBox12.SelectedIndex * 16 + comboBox13.SelectedIndex)status = desfirechangefilesettings(Convert.ToByte(fileid.Value), comset, accessrights(0), retsw(0))retstr = retsw(0).ToString("X2") + retsw(1).ToString("X2")If status = 53 ThenMessageBox.Show("更改文件配置操作返回异常:" + status.ToString("D") + ",说明:CPU卡功能通讯错误,可能是卡拿开重放后未激活或卡不在感应区!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Error)Return       ElseIf (status > 0) ThenMessageBox.Show("更改文件配置操作返回异常:" + status.ToString("D") + ",卡片返回代码:" + retstr + ",说明:" + RetTextFromStr(retstr), "提示", MessageBoxButtons.OK, MessageBoxIcon.Error)ReturnEnd IfMessageBox.Show("更改文件配置操作卡片返回代码:" + retstr + ",说明:" + RetTextFromStr(retstr), "提示", MessageBoxButtons.OK, MessageBoxIcon.Information)End SubPrivate Sub Button19_Click(sender As Object, e As EventArgs) Handles Button19.ClickDim retsw(1) As ByteDim fidsize(0) As Byte '返回的应用数量,最大19个Dim fidbuf(16) As Byte '文件ID号数据缓冲,每个ID号占用1个字节,最多16个文件ID号Dim status As Byte = desfiregetfileids(fidbuf(0), fidsize(0), retsw(0))Dim retstr As String = retsw(0).ToString("X2") + retsw(1).ToString("X2")If (status > 0) ThenMessageBox.Show("搜索当前应用内所有文件ID操作返回异常:" + status.ToString("D") + ",卡片返回代码:" + retstr + ",说明:" + RetTextFromStr(retstr), "提示", MessageBoxButtons.OK, MessageBoxIcon.Error)ReturnEnd IfDim strls1 As String = ""If fidsize(0) > 0 Thenstrls1 = "文件ID号:" & CStr(fidbuf(0))Dim j As Byte = 1While j < fidsize(0)strls1 = strls1 & "," & CStr(fidbuf(j))j = j + 1End WhileEnd IfMessageBox.Show("搜索当前应用内所有文件ID操作,卡片返回代码:" + retstr + ",说明:" + RetTextFromStr(retstr) + vbCrLf + "文件数量:" & fidsize(0).ToString("D") + vbCrLf + strls1, "提示", MessageBoxButtons.OK, MessageBoxIcon.Information)End SubPrivate Sub Button20_Click(sender As Object, e As EventArgs) Handles Button20.ClickDim retsw(1) As ByteDim aidsize(0) As Byte '返回的应用数量,最大19个Dim aidbuf(56) As Byte '应用AID号数据缓冲,每个AID号占用3个字节,最多19个应AID号Dim status As Byte = desfiregetapplicationids(aidbuf(0), aidsize(0), retsw(0))Dim retstr As String = retsw(0).ToString("X2") + retsw(1).ToString("X2")If (status > 0) ThenMessageBox.Show("搜索当前卡片内所有应用AID操作返回异常:" + status.ToString("D") + ",卡片返回代码:" + retstr + ",说明:" + RetTextFromStr(retstr), "提示", MessageBoxButtons.OK, MessageBoxIcon.Error)ReturnEnd IfDim strls1 As String = ""If aidsize(0) > 0 Thenstrls1 = "应用AID:" & aidbuf(0).ToString("X2") & aidbuf(1).ToString("X2") & aidbuf(2).ToString("X2")Dim j As Byte = 1While j < aidsize(0)strls1 = strls1 & "," & aidbuf(j * 3).ToString("X2") & aidbuf(j * 3 + 1).ToString("X2") & aidbuf(j * 3 + 2).ToString("X2")j = j + 1End WhileEnd IfMessageBox.Show("搜索当前卡片内所有应用AID操作,卡片返回代码:" + retstr + ",说明:" + RetTextFromStr(retstr) + vbCrLf + "应用数量:" & aidsize(0).ToString("D") + vbCrLf + strls1, "提示", MessageBoxButtons.OK, MessageBoxIcon.Information)End SubPrivate Sub Button21_Click(sender As Object, e As EventArgs) Handles Button21.ClickDim aidbuf(2) As ByteDim keysetting(0) As ByteDim keysize(0) As ByteDim retsw(1) As ByteDim keynum As IntegerIf Not checkhexstr(textBox5.Text.Trim(), 3, aidbuf) ThenMessageBox.Show("十六进制AID输入错误,请输入3字节的16进制AID!", "警告", MessageBoxButtons.OK, MessageBoxIcon.Error)ReturnEnd IfDim status As Byte = desfiregetkeysettings(aidbuf(0), keysetting(0), keysize(0), retsw(0))Dim retstr As String = retsw(0).ToString("X2") + retsw(1).ToString("X2")If status = 94 ThenMessageBox.Show("请先执行选择应用AID:" + textBox5.Text.Trim(), "提示", MessageBoxButtons.OK, MessageBoxIcon.Error)ReturnElseIf status > 0 ThenMessageBox.Show("读取应用的配置信息操作返回异常:" + status.ToString("D") + ",卡片返回代码:" + retstr + ",说明:" + RetTextFromStr(retstr), "提示", MessageBoxButtons.OK, MessageBoxIcon.Error)ReturnEnd IfcomboBox4.SelectedIndex = keysetting(0) \ 16  '更改应用密钥(非应用主密钥) 需要验证的选项If (keysetting(0) And &H8) > 0 ThencomboBox5.SelectedIndex = 1     '需要验证应用主密钥(默认)ElsecomboBox5.SelectedIndex = 0     '配置值不允许修改(锁定)End IfIf (keysetting(0) And &H4) > 0 ThencomboBox6.SelectedIndex = 1 '无需验证应用主密钥(默认)ElsecomboBox6.SelectedIndex = 0 '需要验证应用主密钥End IfIf (keysetting(0) And &H2) > 0 ThencomboBox7.SelectedIndex = 1 '需要验证应用主密钥ElsecomboBox7.SelectedIndex = 0 '无需验证应用主密钥(默认)End IfIf (keysetting(0) And &H1) > 0 ThencomboBox8.SelectedIndex = 1 '允许更改主密钥(默认)ElsecomboBox8.SelectedIndex = 0 '锁定主密钥End Ifkeynum = (keysize(0) Mod 64)keynumber.Value = keynumIf (keysize(0) And &HC0) = &H80 ThencomboBox2.SelectedIndex = 3ElseIf (keysize(0) And &HC0) = &H40 ThencomboBox2.SelectedIndex = 2ElsecomboBox2.SelectedIndex = 0        '也可能是comboBox2.SelectedIndex = 1End IfMessageBox.Show("读取应用的密钥配置信息操作,卡片返回代码:" + retstr + ",说明:" + RetTextFromStr(retstr) + vbCrLf + "密钥配置:" & keysetting(0).ToString("X2") + vbCrLf + "密钥数量:" + keynum.ToString("D"), "提示", MessageBoxButtons.OK, MessageBoxIcon.Information)End SubPrivate Sub Button22_Click(sender As Object, e As EventArgs) Handles Button22.ClickDim aidbuf(3) As ByteDim retsw(1) As ByteDim retstr As StringIf Not checkhexstr(textBox5.Text.Trim(), 3, aidbuf) ThenMessageBox.Show("十六进制AID输入错误,请输入3字节的16进制AID!", "警告", MessageBoxButtons.OK, MessageBoxIcon.Error)ReturnEnd IfDim keysetting As Byte = Convert.ToByte(comboBox4.SelectedIndex * 16 + comboBox5.SelectedIndex * 8 + comboBox6.SelectedIndex * 4 + comboBox7.SelectedIndex * 2 + comboBox8.SelectedIndex)Dim status As Byte = desfirechangekeysettings(aidbuf(0), keysetting, retsw(0))retstr = retsw(0).ToString("X2") + retsw(1).ToString("X2")If status = 94 ThenMessageBox.Show("请先执行选择应用AID:" + textBox5.Text.Trim(), "提示", MessageBoxButtons.OK, MessageBoxIcon.Error)ReturnElseIf status = 63 ThenMessageBox.Show("需要先验证当前应用的主密钥!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Error)ReturnElseIf (status > 0) ThenMessageBox.Show("更改应用密钥配置操作返回异常:" + status.ToString("D") + ",卡片返回代码:" + retstr + ",说明:" + RetTextFromStr(retstr), "提示", MessageBoxButtons.OK, MessageBoxIcon.Error)End IfMessageBox.Show("更改应用密钥配置操作,卡片返回代码:" + retstr + ",说明:" + RetTextFromStr(retstr), "提示", MessageBoxButtons.OK, MessageBoxIcon.Information)End Sub
End Class

相关文章:

Desfire Ev1\Ev2\Ev3卡DES\3K3DES\AES加解密读写VB.Net示例源码

本示例使用发卡器&#xff1a;https://item.taobao.com/item.htm?spma21dvs.23580594.0.0.1d292c1bSxJTb6&ftt&id917152255720 Public Class Form1Public Declare Function pcdbeep Lib "OUR_MIFARE.dll" (ByVal xms As Integer) As BytePublic Declare Fu…...

商业实战将归巢网内容构建为本地RAG模型的完整指南01-优雅草卓伊凡

商业实战将归巢网内容构建为本地RAG模型的完整指南01-优雅草卓伊凡 今天卓伊凡收到了老客户归巢网关于对本地RAG模型建立的咨询&#xff0c;这点也让卓伊凡得深入研究下&#xff0c;毕竟老客户肯定不是说着玩的&#xff0c;主要最终实现目的是建立模型开始使用AI智能问答。 一…...

langchain4j整合springboot

环境介绍 JDK17Spring Boot: 3.0.2 创建springboot工程 IDEA新建一个springboot项目&#xff0c;使用Spring lnitializr快速构建。 选择Spring Boot: 3.0.2以及Spring Web依赖 添加maven依赖 创建完springboot项目之后&#xff0c;在pom中添加关键依赖 <properties&g…...

在线时间戳转换工具

给大家推荐一个在线时间戳转换工具 点击跳转-鸽鸽在线工具 这个工具除了时间戳转换&#xff0c;到首页还能选择使用很多其他小工具&#xff0c;欢迎使用...

Codeforces Round 1023 (Div. 2) (A-D)

每周至少五篇博客&#xff1a;(1/5) A. LRC and VIP 题意 您有一个大小 n n n 的数组 a a a - a 1 , a 2 , … a n a_1, a_2, \ldots a_n a1​,a2​,…an​ 。 您需要将 n n n 元素分为 2 2 2 序列 B B B 和 C C C &#xff0c;以满足以下条件&#xff1a; 每个元素…...

[Survey]Remote Sensing Temporal Vision-Language Models: A Comprehensive Survey

BaseInfo TitleRemote Sensing Temporal Vision-Language Models: A Comprehensive SurveyAdresshttps://arxiv.org/abs/2412.02573Journal/Time2024 arxivAuthor北航 上海AI LabCodehttps://github.com/Chen-Yang-Liu/Awesome-RS-Temporal-VLM 1. Introduction 传统遥感局限…...

Linux56 YUM源配置

epel未启动 显示系统未通过注册 配置YUM仓库 本地YUM仓库 1.备份 tar -zcf repo.tar.gz *.repo 2.挂载 mount -o ro /dev/sr0 /mnt 3.开机自启 chmod x /etc/rc.local echo ‘mount -o ro /dec/sr0 /mnt’ /etc/rc.local 4.编写本地YUM仓库 local.repo [local] namelocal yum …...

mysql 如何查询数据库链接日志

1&#xff0c;查看是否开启日志 SHOW GLOBAL VARIABLES LIKE general_log; -- 查看是否开启通用查询日志&#xff08;包括连接记录&#xff09; 1.1&#xff0c;假如没开启&#xff0c;可以临时开启&#xff0c;做测试&#xff1b;服务重启&#xff0c;配置失效&#xf…...

Element-Plus-X开源程序是Vue3 + Element-Plus 开箱即用的企业级AI组件库前端的解决方案

​一、软件介绍 文末提供程序和源码下载 Element-Plus-X开源程序是Vue3 Element-Plus 开箱即用的企业级AI组件库前端的解决方案。 二、核心特性 ✨ 企业级 AI 组件&#xff1a;内置聊天机器人、语音交互等场景化组件&#x1f680; 零配置集成&#xff1a;基于 Element-Plus …...

基于DevSecOps敏捷框架的数字供应链安全应解决方案

基于DevSecOps敏捷框架的数字供应链安全应解决方案是以“AI智能代码疫苗技术”深度赋能原创专利级“多模态SCADevSecOpsSBOM情报预警”的第四代DevSecOps数字供应链安全管理体系,在DevSecOps敏捷安全体系建设、数字供应链安全审查、开源供应链安全治理和云原生安全体系建设四大…...

2025年北京市职工职业技能大赛第六届信息通信行业网络安全技能大赛初赛-wp

- -考试当场没做出来 后面做的 misc ❯ cd misc ❯ ls num.docx num.zip ❯ unzip num.docx Archive: num.docxinflating: [Content_Types].xmlinflating: _rels/.relsinflating: word/document.xmlinflating: word/_rels/document.xml.relsextracting: word/media/image1.jp…...

2、实验室测控系统 - /自动化与控制组件/lab-monitoring-system

76个工业组件库示例汇总 实验室测控系统开发组件 这是一个专为实验室设备数据采集与分析设计的可视化测控系统组件。采用工业风格界面设计&#xff0c;提供了丰富的动态数据展示与分析功能&#xff0c;可应用于各类实验室环境中的设备监控和数据处理。 功能特点 多设备管理…...

Blender插件机制设计与Python实现

Blender插件机制设计与Python实现 Blender的插件机制是其强大扩展性的核心&#xff0c;允许开发者通过Python创建自定义功能。下面我将详细介绍Blender插件系统的设计原理&#xff0c;并提供一个完整的示例。 Blender插件系统设计原理 模块化架构&#xff1a;Blender将插件作…...

自定义一个 Spring Boot Starter -笔记

SpringBoot Starter的介绍参考&#xff1a; Spring Boot Starter简介-笔记-CSDN博客。这里介绍如何自定义一个springBoot Starter。 1. 项目结构 创建一个 Maven 项目&#xff0c;结构如下&#xff1a; custom-spring-boot-starter-demo/ ├── custom-hello-jdk/ # jdk模…...

【Part 2安卓原生360°VR播放器开发实战】第三节|实现VR视频播放与时间轴同步控制

《VR 360全景视频开发》专栏 将带你深入探索从全景视频制作到Unity眼镜端应用开发的全流程技术。专栏内容涵盖安卓原生VR播放器开发、Unity VR视频渲染与手势交互、360全景视频制作与优化&#xff0c;以及高分辨率视频性能优化等实战技巧。 &#x1f4dd; 希望通过这个专栏&am…...

读 书 说

好久没有坐下来手敲打字去输出或者记录分享一些比较正式的事情。 今天节后综合征&#xff0c;虽然我已经加了两天班了&#xff0c;但是还是不想加班便准点下班了。 今天来聊聊看书。 为什么会看书&#xff1f;最开始正如我之前提到过&#xff0c;人脉资源不多&#xff0c;也不…...

DOCX转PDF怎么操作最简单?快速将DOCX转换为专业PDF文档

在日常办公或学习中&#xff0c;我们经常需要将 Word 文档&#xff08;.docx格式&#xff09;转换为 PDF 文件。这不仅有助于保持文档格式的一致性&#xff0c;还能确保接收者无需特定软件即可查看文件内容。本文将详细介绍几种常见的方法来实现从 DOCX 到 PDF 的转换&#xff…...

免费轻量化办公pdf修改软件 一键格式转换基础修改到高级加密

各位办公软件小能手们&#xff01;今天咱来聊聊一款超厉害的 PDF 编辑软件——PDFXEdit。你知道吗&#xff0c;这软件就像个 PDF 处理的超级魔法师&#xff0c;能全方位搞定 PDF 文档。下面我就给大家详细说说它的那些功能和适用场景。 首先是基础编辑功能。这软件在文本与图像…...

【HFP】蓝牙语音通信高级功能解析:快速拨号与呼叫等待协议实现

在蓝牙语音通信系统中&#xff0c;除了基础的通话建立与控制流程&#xff0c;高级功能如快速拨号&#xff08;内存拨号、最后号码重拨&#xff09;和呼叫等待通知的实现&#xff0c;直接影响着用户体验的便捷性与系统的实用性。这些功能依赖于蓝牙协议中特定的 AT 命令交互、状…...

CVE-2025-24813:Apache Tomcat RCE 漏洞分析

CVE-2025-24813 是 Apache Tomcat 中的一个严重远程代码执行 (RCE) 漏洞,源于路径等效缺陷,允许攻击者绕过安全约束并远程执行任意代码。 CYFIRMA 的研究发现了一些活跃的漏洞利用,一些 PoC 漏洞在地下论坛上流传。攻击者利用基于 HTTP PUT 的任意文件上传、NTFS 连接漏洞利…...

神经网络之训练的艺术:反向传播与常见问题解决之道

神经网络训练的艺术&#xff1a;反向传播与常见问题解决之道 摘要 神经网络是现代机器学习的核心工具之一&#xff0c;而反向传播则是其训练过程中不可或缺的算法。本文深入探讨了反向传播的工作原理以及在训练过程中常见的问题&#xff0c;如梯度消失、梯度爆炸、死 ReLU 单…...

小土堆pytorch--transform

torchvision中的transform torchvision中的transform1. transforms的使用1.1 transforms的结构及用法理论1.2 相应代码1.3 对上述代码的解释 2. 常见的transforms2.1 python 的call函数2.2 ToTensor的使用2.3 Normalize的使用2.4 Resize的使用2.5 Compose的使用2.6 RandomCrop的…...

【Django】REST 常用类

ModelSerializer serializers.ModelSerializer 是 Django REST framework&#xff08;DRF&#xff09;里的一个强大工具&#xff0c;它能极大简化序列化和反序列化 Django 模型实例的流程。下面从多个方面详细介绍它&#xff1a; 1. 基本概念 序列化是把 Django 模型实例转化…...

PyTorch常用命令详解:助力深度学习开发

&#x1f4cc; 友情提示&#xff1a; 本文内容由银河易创AI&#xff08;https://ai.eaigx.com&#xff09;创作平台的gpt-4-turbo模型生成&#xff0c;旨在提供技术参考与灵感启发。文中观点或代码示例需结合实际情况验证&#xff0c;建议读者通过官方文档或实践进一步确认其准…...

第二章 Logback的架构(二)

Logger, Appenders 和 Layouts Appenders 和 Layouts 基于日志记录器选择性地启用或禁用日志记录请求只是其中的一部分功能。Logback允许将日志记录请求输出到多个目标。在Logback术语中&#xff0c;输出目标被称为Appender。 目前&#xff0c;已经存在适用于控制台、文件、远…...

【大数据】服务器上部署Apache Paimon

1. 环境准备 在开始部署之前&#xff0c;请确保服务器满足以下基本要求&#xff1a; 操作系统: 推荐使用 Linux&#xff08;如 Ubuntu、CentOS&#xff09;。 Java 环境: Paimon 依赖 Java&#xff0c;推荐安装 JDK 8 或更高版本。 Flink 环境: Paimon 是基于 Apache Flink 的…...

【IP101】图像处理进阶:从直方图均衡化到伽马变换,全面掌握图像增强技术

&#x1f31f; 图像增强魔法指南 &#x1f3a8; 在图像处理的世界里&#xff0c;增强就像是给图片化妆&#xff0c;让它展现出最佳的状态。让我们一起来探索这些神奇的增强术吧&#xff01; &#x1f4da; 目录 基础概念 - 图像增强的"美容院"直方图均衡化 - 光线的…...

【Azure Redis 缓存】关于Azure Cache for Redis 服务在传输和存储键值对(Key/Value)的加密问题

问题描述 Azure Cache for Redis 服务在传输和存储数据时是如何加密呢&#xff1f; 问题回答 一&#xff1a;关于Azure cache for Redis服务在数据传输过程中是如何加密的&#xff1f; 为了确保在Azure cache for Redis和客户端应用程序之间传输的数据安全&#xff0c;需要启用…...

Cursor 被封解决方案

一、注册一个无限邮箱 没事点点广告&#xff0c;让网站活久一点(✪ω✪) 2925邮箱-无限邮2925无限邮箱支持多种客户端收发邮件且数据安全加密多端同步。只需要注册一个账号&#xff0c;就能生成无限多个2925子邮箱账号&#xff0c;同时利用一邮多用功能对多个子邮箱邮件进行集…...

spring上传文件添加水印

1、实现 MultipartFile package com.pojo.common.core.domain;import java.io.ByteArrayInputStream; import java.io.File; import java.io.IOException; import java.io.InputStream;import org.springframework.lang.Nullable; import org.springframework.util.Assert; im…...

CSS分栏布局

分栏布局将区域划分为若干垂直的栏&#xff0c;子元素放置到栏中&#xff0c;填满一个后再填充下一个。如果设置了 column-count 栏数量或 column-width 栏宽度&#xff0c;元素就成为分栏容器。需要注意&#xff0c; column-width 实际上是最小栏宽度。浏览器使用这个值计算栏…...

通过 ModernBERT 实现零样本分类的性能提升

文本分类 是机器学习中最基础的任务之一&#xff0c;拥有悠久的研究历史和深远的实用价值。更重要的是&#xff0c;它是许多实际项目中不可或缺的组成部分&#xff0c;从搜索引擎到生物医学研究都离不开它。文本分类方法被广泛应用于科学论文分类、用户工单分类、社交媒体情感分…...

【AI】Ubuntu 22.04 4060Ti 16G vllm-api部署Qwen3-8B-FP8

下载模型 # 非常重要&#xff0c;否则容易不兼容报错 pip install modelscope -U cd /data/ai/models modelscope download --model Qwen/Qwen3-8B-FP8 --local_dir ./Qwen3-8B-FP8 安装vllm 创建虚拟环境 mkdir vllm cd vllm/ python -m venv venv ource venv/bin/activat…...

QML ProgressBar控件详解

在 QML 中&#xff0c;ProgressBar 是一个常用的进度条控件&#xff0c;用于显示任务的完成进度。以下是 ProgressBar 的详细用法&#xff0c;包括基本用法、自定义样式、动态绑定数据等。 1. 基本用法 1.1 最简单的 ProgressBar import QtQuick.Controls 2.15ProgressBar {w…...

STM32教程:串口USART通讯协议原理及分析(基于STM32F103C8T6最小系统板标准库开发)*详细教程*

前言: 本文主要介绍了单片机的通讯协议和STM32的串口USART通讯的原理及分析。 通信的目的 将一个设备的数据传送到另一个设备,扩展硬件系统。 通信协议 指定通信的规则,通信双方按照协议规则进行数据收发。 STM32常见通讯协议 各通讯特点 USART: TX(发送)、RX(接…...

EDA文件

不同的EDA软件使用不同的文件扩展名和格式&#xff0c;以下是主流工具对应的文件类型&#xff1a; EDA软件文件扩展名说明Altium Designer.PcbDocAltium专属格式&#xff0c;需用原软件打开&#xff0c;可导出为Gerber或STEP文件用于生产。KiCad.kicad_pcbKiCad项目文件&#…...

【C/C++】构造函数与析构函数

&#x1f4d8; C 构造函数与析构函数详解笔记 &#x1f9e0; 为什么需要构造函数与析构函数&#xff1f; 在 C 中&#xff0c;对象创建和销毁过程如果仅靠手动赋值和清理非常容易出错。为此&#xff0c;语言提供了构造函数和析构函数&#xff1a; 构造函数&#xff1a;用于在…...

在Unity AR应用中实现摄像头切换功能

本教程将详细讲解如何在Unity AR Foundation项目中实现前后摄像头切换功能,并提供完整的代码解析。我们将使用AR Foundation的核心组件和简单的UI交互来实现这一功能。 第一部分:环境准备 1.1 所需组件 Unity 2019.4或更高版本 AR Foundation 4.0+ ARCore XR Plugin(Andro…...

Pycharm(十九)深度学习

一、深度学习概述 1.1 什么是深度学习 深度学习是机器学习中的一种特殊方法,它使用称为神经网络的复杂结构,特别是“深层”的神经网络,来学习和做出预测。深度学习特别适合处理大规模和高维度的数据,如图像、声音和文本。深度学习、机器学习和人工智能之间的关系如下图所…...

状态模式 VS 策略模式

在软件开发的世界里&#xff0c;设计模式如同工匠手中的精良工具&#xff0c;能帮助开发者打造出结构清晰、易于维护和扩展的软件系统。状态模式和策略模式便是其中两个常用却容易让人混淆的设计模式。接下来&#xff0c;我们会详细剖析它们的区别、适用场景&#xff0c;并给出…...

如何在 Ubuntu 24.04 本地安装 DeepSeek ?

在本地 Ubuntu 系统上安装 DeepSeek 可以让您在本地使用高级 AI 功能&#xff0c;从而消除对云服务的依赖需求。 What is DeepSeek? DeepSeek 是一个先进的开源人工智能模型&#xff0c;专为自然语言理解和生成而设计。它提供了类似ChatGPT的强大功能。 Prerequisites: A …...

云计算训练营笔记day02(Linux、计算机网络、进制)

Linux 是一个操作系统 Linux版本 RedHat Rocky Linux CentOS7 Linux Ubuntu Linux Debian Linux Deepin Linux 登录用户 管理员 root a 普通用户 nsd a 打开终端 放大: ctrl shift 缩小: ctrl - 命令行提示符 [rootlocalhost ~]# ~ 家目录 /root 当前登录的用户…...

数据库实验10 函数存储

数据库实验10 一、实验目的 掌握函数和存储过程的定义方法&#xff0c;包括标量函数、表值函数、存储过程的语法结构。理解函数和存储过程的作用及原理&#xff0c;区分标量函数与表值函数的应用场景&#xff0c;掌握存储过程的参数传递、逻辑控制和错误处理机制。能够熟练运…...

SQL Server执行安装python环境

安装注意事项 启用python脚本支持 sp_configure external scripts enabled, 1; RECONFIGURE; 安装后接受 Python EULA协议 接受python授权 setup.exe /qs /ACTIONInstall /FEATURESSQL_INST_MR /INSTANCENAME您的实例名 /IACCEPTROPENLICENSETERMS1 /IACCEPTPYTHONLICENSETE…...

ActiveMQ 安全机制与企业级实践(二)

四、企业级实践案例分析 4.1 案例背景介绍 某大型电商企业拥有复杂的分布式系统&#xff0c;涵盖订单管理、库存管理、物流配送、用户服务等多个核心业务模块。在业务快速发展过程中&#xff0c;系统间的通信量呈爆发式增长&#xff0c;为了实现系统的高效解耦和异步通信&…...

ActiveMQ 安全机制与企业级实践(一)

一、引言 在当今数字化时代&#xff0c;企业级应用的架构愈发复杂&#xff0c;各个系统之间的通信和协作变得至关重要。消息队列作为一种高效的异步通信机制&#xff0c;在企业级应用集成中扮演着关键角色。ActiveMQ 作为一款广泛使用的开源消息中间件&#xff0c;以其丰富的功…...

【Python pass 语句】

在 Python 中&#xff0c;pass 语句是一个特殊的空操作&#xff08;no-op&#xff09;语句&#xff0c;它的核心作用是保持程序结构的完整性&#xff0c;同时不执行任何实际操作。以下是详细说明&#xff1a; 一、基础特性 语法占位符&#xff1a;当语法上需要一条语句&#x…...

Maven依赖未生效问题

在你描述的情况下&#xff0c;测试类无法找到 Maven 依赖的 jar 包&#xff0c;可能由以下原因导致&#xff1a; 依赖未正确添加到 pom.xml 检查 pom.xml 文件中是否正确添加了 Elasticsearch 和 JUnit 等相关依赖。例如&#xff0c;对于 Elasticsearch 的 TransportClient 相关…...

NGINX `ngx_http_auth_request_module` 模块详解基于子请求的认证授权方案

一、背景介绍 在 Web 系统中&#xff0c;我们常常需要根据外部服务&#xff08;例如单点登录、API 网关、权限中心&#xff09;的结果来判断用户是否有权限访问某个资源。NGINX 提供的 ngx_http_auth_request_module 模块&#xff0c;正是为这种场景而生。它允许通过向后端发送…...

Qwen3简要介绍(截止20250506)

Qwen3是阿里云推出的一个大语言模型系列&#xff0c;它在多个方面进行了升级和优化。以下是Qwen3的一些主要特点&#xff1a; 模型规模多样&#xff1a;Qwen3提供了一系列不同规模的模型&#xff0c;包括稠密模型&#xff08;0.6B、1.7B、4B、8B、14B、32B&#xff09;以及专家…...