國家電網新標準推出了,最近剛拿到一些資料,由於公司沒有研發團隊,加上國網給的DLL沒有DEMO,很多東西只好自己邊看一邊試;
看到有些人也和我剛接觸這東西一樣不知道從何處下手.
今天感冒了,沒什麼思緒來寫程式,特寫一篇文章出來,希望對大家有協助.同時也希望大家都能一起來多交流交流;
--------------------------------龍億
本人現在寫的是遠程費控智能電錶,所以只需用到以下二個函數(其他函數還沒測試,不過聽說"儲值函數"傳回值和說明不一致)
主站函數說明
說明:以下函數在 TestZhuzhan.dll 中,測試時請在RD-1000 讀
卡器中插上測試母卡。
1. 身份認證函數
函數名稱 IdentityAuthentication(char *Div,char *RandAndEndata)
函數功能身份認證取隨機數和密文
Div,輸入參數,8 位元組分散因子,16 進位字串。
參數說明 RandAndEndata,輸出參數,字元型,8 位元組隨機數+8 位元組
密文。
成功標誌 0,成功;
200,串連加密機失敗;
201,取隨機數1 失敗;
202,取隨機數2 失敗;
203,密鑰分散失敗;
204,資料加密失敗;
205,取密文失敗;
2.遠端控制函數
函數名稱 UserControl(char *RandDivEsamNumData,char *dataOut)
函數功能遠端控制
RandDivEsamNumData,輸入參數,字元型,4 位元組隨機數
參數說明 +8位元組分散因子+8位元組ESAM序號+資料明文。
dataOut,字元型,20 位元組密文
成功標誌 0,成功;
200,串連加密機失敗;
201,寫卡失敗;
202,讀卡失敗;
203,計算密文失敗;
注:這個DLL在C#和VB裡都是不可以直接引用的,需要通過DllImport來引用他
通訊流程:
從中可以看出我們要設計的流程是:
1.取8 位元組分散因子,16 進位字串(可以是自己設一個固定8位元組數);
2.調用TestZhuZhan.dll介面上的IdentityAuthentication函數得到隨機數1和密文1;
3.將得到的隨機數1和密文1發送到電錶中,電錶將返回4位元組隨機數2和8位元組ESAM序號;
4.調用TestZhuzhan.dll介面安全認證函數UserControl(char *RandDivEsamNumData,char *dataOut) , 得到20位元組密文;
參數1中:資料明文為:1位元組控制碼N1+1位元組保留欄位+大於目前時間的日期yyMMddHHmmss(書上寫的是ssmmHHddMMyy是指密文,明文是不用倒的,這裡害我調試了半天才好);
N1=1AH代表跳閘,N1=1BH代表合閘允許,N1=2AH代表警示,N1=2BH代表警示解除,N1=3AH代表保電,N1=3BH代表保電解除
5.將密文發送到電錶,結束
注:1,2,3步安全認證只需發一次,
控制主要在4,5二步
具體作業碼將在下一篇中和大家討論.----龍億(2009-12-08 16:32)