TestZhuzhan.dll,最近用C#写这方面的代码
时间:2011-12-15
来源:互联网
C# code
第1个函数和第2个函数没问题了。后面几个函数有些不明白,主要是有些参数不清楚
/*------------------------------------------------------------- 1. 身份认证函数 函数名称 IdentityAuthentication(char *Div,char *RandAndEndata) 函数功能身份认证取随机数和密文 Div,输入参数,8 字节分散因子,16 进制字符串。 参数说明 RandAndEndata,输出参数,字符型,8 字节随机数+8 字节 密文。 成功标志 0,成功; */ [DllImport("TestZhuzhan.dll", EntryPoint = "IdentityAuthentication")] private static extern int IdentityAuthentication(string Div, byte[] RandAndEndata); /* * 2.远程控制函数 函数名称 UserControl(char *RandDivEsamNumData,char *dataOut) 函数功能远程控制 RandDivEsamNumData,输入参数,字符型,4 字节随机数 参数说明 +8字节分散因子+8字节ESAM序列号+数据明文。 dataOut,字符型,20 字节密文 成功标志 0,成功; 200,连接加密机失败; 201,写卡失败; 202,读卡失败; 203,计算密文失败; */ [DllImport("TestZhuzhan.dll", EntryPoint = "UserControl")] private static extern int UserControl(string RandDivEsamNumData, byte[] dataOut); /* 充值函数 函数名称 InCreasePurse(char *RandDivData,char *dataout) 函数功能钱包充值 4 字节随机数; 8 字节分散因子; 电量和次数,8 字节; RandDivData (字符型) 首次充值时,6 字节户号。 参数说明 dataout 返回电量,次数和4 字节MAC。 成功标志 0,成功; */ [DllImport("TestZhuzhan.dll", EntryPoint = "UserControl")] private static extern int InCreasePurse(string RandDivData, byte[] dataOut); public int InCreasePurseWithMoney(string Ramdata,int DlValue,int CS,string UserID,out string RamValue,out string SendData) { string RandDivData = ""; RandDivData = RandDivData + Ramdata; RandDivData = RandDivData + Fsyz; RandDivData = RandDivData; RamValue = ""; SendData = ""; return 1; } /* * 4.参数更新函数 函数名称 ParameterUpdate(char *RandDivApduData,char *dataout) 函数功能更新参数 4 字节随机数; 8 字节分散因子; 更新指令 10 位(04d682+起始+LC); LC=明文数据长度+4。 RandApduDivData (字符型) 其他为参数明文。 参数说明 dataout 返回参数明文和MAC。 成功标志 0,成功; */ [DllImport("TestZhuzhan.dll", EntryPoint = "ParameterUpdate")] private static extern int ParameterUpdate(string RandDivApduData, byte[] dataout); /* * 5.密文+MAC 参数更新函数 函数名称 ParameterElseUpdate(char *RandDivApduData, char *EsamNum,char *dataout) 函数功能密文+MAC 更新参数 4 字节随机数; 8 字节分散因子; 更新指令 10 位(04d6+文件标识+00+LC); (此处 LC 长度为下发密文数据+MAC 的长 度) RandApduDivData (字符型) 其他为参数明文。 EsamNum 输入参数,8 字节ESAM 序列号。 参数说明 dataout 返回参数密文和MAC。 电能表接收密文+MAC 后,用04d6+文件标 识+00+LC+密文+MAC 更新ESAM 文件,然 后明文读取数据,该文件第一个字节为明文 数据的长度(HEX),可以根据该长度取所 解密后的明文。 成功标志 0,成功; */ [DllImport("TestZhuzhan.dll", EntryPoint = "ParameterElseUpdate")] private static extern int ParameterElseUpdate(string RandDivApduData, string EsamNum, byte[] dataout); public int UpdateMacAndPassData(string RamData, string FileMark,string MacData, string EsamData, out string OutRandAndEndata, out string SendData) { int LC = RamData.Length / 2 + MacData.Length; string RandDivApduData = RamData; RandDivApduData = RandDivApduData + "04d6" + FileMark + "00" +GetEvenData(Convert.ToString(LC,16))+ MacData; byte[] rtnData=new byte[40]; SendData = RandDivApduData; int rtnValue = ParameterElseUpdate(RandDivApduData, EsamData, rtnData); OutRandAndEndata = Encoding.UTF8.GetString(rtnData); return rtnValue; } /* * 密钥更新函数 函数名称 KeyUpdate(int kid ,char *DivEsamNumRandData,char *dataOut) 函数功能更新密钥 Kid 整型, kid=1,身份认证密钥; kid=2,远程控制密钥; Kid=3,参数更新密钥。 DivEsamNumRandData 输入参数,字符型,8 字节分散因子+8 字节ESAM序列号+4字节随机数+4字节数据明文。 参数说明 dataout 返回32 字节密文+ 4 字节密钥信息+4 字节MAC。 成功标志 0,成功; */ [DllImport("TestZhuzhan.dll", EntryPoint = "KeyUpdate")] private static extern int KeyUpdate(int kid, string DivEsamNumRandData, byte[] dataout); /// <summary> /// 密钥更新函数 /// int Kid kid=1,身份认证密钥;kid=2,远程控制密钥;Kid=3,参数更新密钥; /// string EsamData 8字节ESAM序列号; /// string RamData 4字节随机数; /// string DataItem 4字节数据明文; /// out string OutRandAndEndata 返回32 字节密文+ 4 字节密钥信息+4 字节MAC /// out string SendData 发送的内容数据 /// </summary> public int MeterKeyUpdate(int Kid, string EsamData, string RamData, string DataItem, out string OutRandAndEndata, out string SendData) { string DivEsamNumRandData = ""; DivEsamNumRandData = Fsyz; DivEsamNumRandData = DivEsamNumRandData + EsamData; DivEsamNumRandData = DivEsamNumRandData + RamData; DivEsamNumRandData = DivEsamNumRandData + DataItem; byte[] rtnData = new byte[32 + 4 + 4]; int rtnValue = KeyUpdate(Kid, DivEsamNumRandData, rtnData); SendData = DivEsamNumRandData; OutRandAndEndata = Encoding.UTF8.GetString(rtnData); return rtnValue; } /* * 7.校验MAC 函数 函数名称 Maccheck(char *RandDivData,char *dataout) 函数功能校验 MAC RandDivApduData 输入参数,4 字节随机数+8 字节分散因子+5 字节指令(04d68600+LC)+数据明文+4 字节MAC。 LC=明文长度+0x0C; 参数说明 dataout 空 成功标志 0,成功;其他 MAC 错 */ [DllImport("TestZhuzhan.dll", EntryPoint = "Maccheck")] private static extern int Maccheck(string RandDivApduData, byte[] dataout); /// <summary> /// 校验Mac函数 /// string RamData 4个字节随机数; /// string DataItem 数据明文内容 /// string MacData 4个字节的MAC内容 /// out string SendData 返回发送的数据内容 /// 返回 成功标志 0,成功;其他 MAC 错 /// </summary> /// <param name="RamData"></param> /// <param name="DataItem"></param> /// <param name="MacData"></param> /// <param name="SendData"></param> /// <returns></returns> public int CheckMeterMAC(string RamData, string DataItem, string MacData, out string SendData) { int LenData = DataItem.Length / 2; LenData = LenData + 0xc; string RandDivApduData = ""; RandDivApduData = RamData; RandDivApduData = RandDivApduData + Fsyz; RandDivApduData = RandDivApduData + "04d68600" + GetEvenData(Convert.ToString(LenData,16)) ; RandDivApduData = RandDivApduData + DataItem; RandDivApduData = RandDivApduData + MacData; byte[] rtnData = null; SendData = RandDivApduData; int rtnValue = Maccheck(RandDivApduData, rtnData); return rtnValue; } /// <summary> /// 身份认证函数 /// 函数功能身份认证取随机数和密文 /// Div,输入参数,8 字节分散因子,16 进制字符串。 /// 返回字符型:8 字节随机数+8 字节密文。 /// 成功标志 0,成功;200,连接加密机失败;201,取随机数1 失败;202,取随机数2 失败; /// 203,密钥分散失败; /// 204,数据加密失败; /// 205,取密文失败; /// </summary> /// <param name="OutRandAndEndata"></param> /// <returns></returns> public int GetIdentityAuthentication(out string OutRandAndEndata,out string SendData) { int RetrnValue = 0; byte[] rtnValue = new byte[32]; SendData = Fsyz; RetrnValue = IdentityAuthentication(Fsyz, rtnValue); OutRandAndEndata = Encoding.UTF8.GetString(rtnValue); return RetrnValue; } /// <summary> /// 获取远程控制20个字节密文 /// string CtrlCode 控制命令 /// string RandomData 4个字节随机数 /// string EsamID 8个字节的ESAM序列号 /// DateTime TestTime 时间参数 /// out string MyData 返回20个字节密文 /// </summary> /// <param name="CtrlCode"></param> /// <param name="RandomData"></param> /// <param name="EsamID"></param> /// <param name="TestTime"></param> /// <param name="MyData"></param> /// <returns></returns> public int GetPasswordData(string CtrlCode, string RandomData,string EsamID, string TestTime, out string MyData,out string SendData) { int OkData = 0; byte[] rtnValue = new byte[40]; StringBuilder Data = new StringBuilder(); Data.Append(RandomData); Data.Append(Fsyz); Data.Append(EsamID); Data.Append(CtrlCode); Data.Append("00"); Data.Append(TestTime); SendData = Data.ToString(); OkData = UserControl(Data.ToString(), rtnValue); MyData = Encoding.UTF8.GetString(rtnValue); return OkData; }
第1个函数和第2个函数没问题了。后面几个函数有些不明白,主要是有些参数不清楚
作者: ucyhboy 发布时间: 2011-12-15
沙发,帮顶、
作者: kingboy2008 发布时间: 2011-12-15
这个要结合业务来看
作者: Sandy945 发布时间: 2011-12-15
本人已经调通了身份认证和远程控制功能,后面的一些函数主要是一些参数不明白,希望高手能共赏资源。
1)充值函数中的电量和次数,8 字节;不知道是如何分配的电量几个字节,次数是几个字节;
2)参数更新函数中的 更新指令 10 位(04d682+起始+LC);LC=明文数据长度+4。 RandApduDivData
(字符型)其他为参数明文。起始不明是啥参数,其它明文参数不明白发送啥内容?
3)密文+MAC 参数更新函数中的 更新指令 10 位(04d6+文件标识+00+LC);(此处 LC 长度为下发密文数据+MAC 的长 度)RandApduDivData(字符型)其他为参数明文。文件标识和其它参数明文不清楚?
4)密钥更新函数中的4字节数据明文不明啥含义?
谢谢,
5)顺便问问两个独立应用程序如何同时调用TestZhuzhan.dll文件?
1)充值函数中的电量和次数,8 字节;不知道是如何分配的电量几个字节,次数是几个字节;
2)参数更新函数中的 更新指令 10 位(04d682+起始+LC);LC=明文数据长度+4。 RandApduDivData
(字符型)其他为参数明文。起始不明是啥参数,其它明文参数不明白发送啥内容?
3)密文+MAC 参数更新函数中的 更新指令 10 位(04d6+文件标识+00+LC);(此处 LC 长度为下发密文数据+MAC 的长 度)RandApduDivData(字符型)其他为参数明文。文件标识和其它参数明文不清楚?
4)密钥更新函数中的4字节数据明文不明啥含义?
谢谢,
5)顺便问问两个独立应用程序如何同时调用TestZhuzhan.dll文件?
作者: ucyhboy 发布时间: 2011-12-15
希望得到大家的帮助,谢谢
作者: ucyhboy 发布时间: 2011-12-15
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28