【原创】国网远程加密机认证软件开发1(相关说明)

由于前段时间做校表软件被领导的计划打断了,估计后续会补上。自己找了好久都没有国网远程加密机的资料,现在就把自己开发的过程附上吧,也便于以后如果有需要的可以参考下。

——————————————————————————————————————————————————————————————————————————————————

1.需要用到的动态库说明

虽然电科院给了一份函数说明文档,但是讲的太模糊了,也没有一个DEMO,所以一切都要自己来摸索。

我们认证过程用到的函数库为SJJ1009forformalchip.dll(其中具体的函数请自行查阅相关文档)

。打开设备,连接加密机

[DllImport("SJJ1009forformalchip.dll")]
        public static extern int ConnectDevice(string putIp, string putPortk, string putCTime);

putIP:加密机IP

putPort:加密机端口

putCTime:最大超时时间

错误代码:17 未插入USBKey或密码机未开机(可以遇到自行整理)

。认证函数

[DllImport("SJJ1009forformalchip.dll")]
        public static extern int Meter_Formal_IdentityAuthentication(int Flag, string PutDiv, System.Text.StringBuilder OutRand, System.Text.StringBuilder OutEndata);

Flag:密钥类型

PutDiv:8字节分散因子。0000+表号

OutRand:随机数1

OutEndData:密文1

注意:随机数1和密文1是加密机返回数据

认真过程主要就是这两个函数,如果以后涉及到远程控制的话,会在后续添加的。

2.认证过程

(1)连接加密机

(2)取8字节的分散因子,国网统一规定为0000+表号,不过大家也可以自行设置

(3)利用身份认证指令取得随机数1和密文1

(4)将随机数1,密文,分散因子和操作者代码、电表密码、身份认证指令通过串口发送给电表

(5)电表将返回4字节的随机数2和8字节的ESAM序列号

到此,整个身份认证的过程就完成了。

相对于老国网的认证,现在的认证过程相对繁琐了,不过大致原理是一样的,可以参考l另外两篇篇比较全面的博文

(原创)-智能电能表SM1算法开发套件(主站接口) 基础资料篇

(原创)-智能电能表SM1算法开发套件(主站接口) 开发篇

远程的加密机需要用到比较简单的socket,不会的可以自行补脑,百度到处都是参考。

原文地址:https://www.cnblogs.com/dranched/p/3758785.html