測試Rockey 4 Smart加密鎖的C語言代碼
// win32Console_dog_test.cpp : Defines the entry point for the console application. /// // //測試Rockey 4 Smart加密鎖的C語言代碼 // /// #include "stdafx.h" #include <conio.h> #include "time.h" #include "Ry4S.h" //-------------------------------------------------------- //define function style void ShowERR(WORD retcode); void HexBufferToString(char* str,BYTE* buf,int len); char* word2cp(WORD value); //WORD轉字符串函數 char* UnionStr(const char* A,const char* B); //合并字符串函數 char* strcat_lc(const char* A,const char* B); char* a2u(const char* A,const char* B); char* a3u(const char* A,const char* B,const char* C); char* GetERR_Cn(WORD retcode); //-------------------------------------------------------- //主程序入口函數 int main(int argc, char* argv[]) { printf("Hello World!\n"); //定義變量 bool is_2=false; //一級或二級密碼開關 is_2=true; // WORD handle, p1, p2, p3, p4, retcode; DWORD lp1, lp2; BYTE buffer[1024];//1024 //設置密碼 (試用版公開默認密碼) //設置一級密碼p1,p2 p1 = 0xc44c; // Rockey4Smart Demo Password1 p2 = 0xc8f8; // Rockey4Smart Demo Password2 //設置二級密碼p3,p4 p3 = 0; // Program needn't Password3, Set to 0 p4 = 0; // Program needn't Password4, Set to 0 /* //二級試用版公開默認密碼*/ if(is_2==true) { p3 = 0x0799; p4 = 0xc43b; } //初始化 memset(buffer,0,1024); //查找加密鎖方法 //---------------------------- printf("查找鎖中..."); retcode = Rockey(RY_FIND, &handle, &lp1, &lp2, &p1, &p2, &p3, &p4, buffer); if (retcode) { printf("查找鎖出錯: "); ShowERR(retcode); return -1; } char* hid=new char[sizeof(lp1)]; sprintf(hid,"%08X",lp1); printf("找到一個加密鎖,hid=%s ",hid); //printf("Find Rock: %08X\n", lp1); printf("查找鎖完成!\n"); //---------------------------- //找到加密鎖并打開 printf("打開鎖中..."); retcode = Rockey(RY_OPEN, &handle, &lp1, &lp2, &p1, &p2, &p3, &p4, buffer); if (retcode) // Error { printf("打開鎖出錯,Error Code: %d\n", retcode); return -1; } printf("打開鎖完成!\n"); //---------------------------- //[用戶存儲區]寫入數據 printf("[用戶存儲區]寫入數據中..."); //0~499 低地址區(一,二級密碼均可讀寫) //500~2000 高地址區(一級只讀,二級可讀寫) if(is_2==false) { p1=0; //pos p2=500; //length 500 } else { p1=0; //pos p2=900; //length 500 / 900 (=1024?) } strcpy((char*)buffer,"Hello world! Rockey4 Smart!"); //for(int i=p1;i<p2;i++){buffer[i]=i;} retcode=Rockey(RY_WRITE,&handle,&lp1,&lp2,&p1,&p2,&p3,&p4,buffer); if(retcode) { printf("寫入數據出錯\n ErrorCode:%d\n,ErrorInfo:%s\n",retcode,GetERR_Cn(retcode)); return -1; } printf("Write data:%s\n",buffer); printf("[用戶存儲區]寫入數據完成!\n"); //---------------------------- //[用戶存儲區]讀取數據 printf("[用戶存儲區]讀取數據中..."); p1 = 0; // Pos p2 = 500; // Length buffer[14] = 0; retcode = Rockey(RY_READ, &handle, &lp1, &lp2, &p1, &p2, &p3, &p4, buffer); if (retcode) // Error { printf("讀取用戶存儲區出錯\n Error Code: %d\n", retcode); return -1; } // ============================================================== printf("buffer:%s\n", buffer); printf("[用戶存儲區]讀取數據完成!\n"); //---------------------------- //產生隨機數 OK for(int i=0;i<10;i++) { retcode = Rockey(RY_RANDOM, &handle, &lp1, &lp2, &p1, &p2, &p3, &p4, buffer); if (retcode) // Error { printf("產生隨機數出錯了\n,Error Code: %d\n", retcode); return -1; } printf("生成的隨機數為Random 16Hex:%04X,10Dec:%d\n", p1,p1); //sprintf(buffer, "%04X", p1); } //---------------------------- //產生種子碼 OK lp2=0x12345678; retcode=Rockey(RY_SEED,&handle,&lp1,&lp2,&p1,&p2,&p3,&p4,buffer); if(retcode) //out error { printf("產生種子碼出錯\n,Error code:%d\n,Error info:%s\n",retcode,GetERR_Cn(retcode)); return -1; } printf("種子碼為種碼為%X\n",lp2); printf("子碼為Seed:%04X %04X %04X %04X\n",p1,p2,p3,p4); if (p1==0xD03A && p2==0x94D6 && p3==0x96A9 && p4==0x7F54) { //種子碼正確 種為0x12345678,子碼為0xD03A 0x94D6 0x96A9 0x7F54 printf("種子碼正確,Hello World!\n"); } else { printf("種子碼出錯了,Hello error!\n"); return -1; } //---------------------------- //寫入用戶ID RY_WRITE_USERID if(is_2==true) { lp1 = 0x88888888; retcode = Rockey(RY_WRITE_USERID, &handle, &lp1, &lp2, &p1, &p2, &p3, &p4, buffer); if (retcode) // Error { printf("寫入用戶ID,Error Code: %d\n", retcode); return -1; } printf("Write User ID: %08X\n", lp1); } //---------------------------- //讀取用戶ID RY_READ_USERID lp1 = 0; retcode = Rockey(RY_READ_USERID, &handle, &lp1, &lp2, &p1, &p2, &p3, &p4, buffer); if (retcode) // Error { printf("Error Code: %d\n", retcode); return -1; } printf("讀取用戶ID UID=%X\n",lp1); if (lp1==0x88888888) { printf("Hello world! UID=%X\n",lp1); } else { printf("Hello DEMO!\n"); return -1; } //---------------------------- //設置模塊字RY_SET_MODULE if(is_2==true) { p1 = 0; p2 = 3; p3 = 0; retcode = Rockey(RY_SET_MODULE, &handle, &lp1, &lp2, &p1, &p2, &p3, &p4, buffer); if (retcode) // Error { printf("Error Code: %d\n", retcode); return -1; } printf("Set Moudle 0: Pass = %04X Decrease no allow\n", p2); //Set Moudle 0: Pass = 0x0003 Decrease no allow 不允許減少 } //---------------------------- //檢查模塊狀態 RY_CHECK_MODULE p1 = 0; retcode = Rockey(RY_CHECK_MODULE, &handle, &lp1, &lp2, &p1, &p2, &p3, &p4, buffer); if (retcode) // Error { printf("檢查模塊狀態,Error Code: %d\n", retcode); return -1; } printf("check Moudle 0: Pass = %04X Decrease no allow\n", p2); printf("檢查模塊狀態,lp1=%04X,lp2=%04X,p1=%04X,p2=%04X,p3=%04X,p4=%04X\n", lp1,lp2,p1,p2,p3,p4); //pass =0x0001 if (p2) printf("檢查模塊狀態,Hello world!\n"); else return -1; if (p2!=1) { printf("Update Please!\n"); return -1; } if(is_2==true)//if(p3==1) { /* p1=0; //遞減模塊單元 RY_DECREASE retcode = Rockey(RY_DECREASE, &handle, &lp1, &lp2, &p1, &p2, &p3, &p4, buffer); if(retcode) { printf("遞減模塊單元,Error Code: %d,Error info:%s\n", retcode,GetERR_Cn(retcode)); return -1; } printf("遞減模塊單元,lp1=%04X,lp2=%04X,p1=%04X,p2=%04X,p3=%04X,p4=%04X\n", lp1,lp2,p1,p2,p3,p4); */ } //---------------------------- //加密解密一個例子 char str[20]="bfgis_system"; DWORD mykey=12345678; int slen = strlen(str); int n; // Encrypt my data 加密我的數據 lp2 = mykey; //產生種子碼 retcode = Rockey(RY_SEED, &handle, &lp1, &lp2, &p1, &p2, &p3, &p4, buffer); if (retcode) // Error { printf("Error Code: %d\n", retcode); return -1; } for (n=0;n<slen;n++) { str[n] = str[n] + (char)p1 + (char)p2 + (char)p3 + (char)p4; } printf("加密我的數據,Encrypted data is %s\n", str); // Decrypt my data 解密我的數據 lp2 = mykey; //產生種子碼 retcode = Rockey(RY_SEED, &handle, &lp1, &lp2, &p1, &p2, &p3, &p4, buffer); if (retcode) // Error { printf("Error Code: %d\n", retcode); return -1; } for (n=0;n<slen;n++) { str[n] = str[n] - (char)p1 - (char)p2 - (char)p3 - (char)p4; } printf("解密我的數據,Decrypted data is %s\n", str); //---------------------------- //日期操作 char *buf=new char[1024]; SYSTEMTIME st; GetLocalTime(&st); printf("Date:%04d%02d%02d\n",st.wYear,st.wMonth,st.wDay); //獲取年月日 sprintf(buf,"%04d%02d%02d",st.wYear,st.wMonth,st.wDay); // lp1 = 0x20121101; //寫入UID retcode = Rockey(RY_WRITE_USERID, &handle, &lp1, &lp2, &p1, &p2, &p3, &p4, buffer); if (retcode) { ShowERR(retcode); return -1; } printf("Write User ID: %08X\n", lp1); lp1 = 0; //讀取UID retcode = Rockey(RY_READ_USERID, &handle, &lp1, &lp2, &p1, &p2, &p3, &p4, buffer); if (retcode) { ShowERR(retcode); return -1; } printf("Read User ID: %08X\n", lp1); // //if(strcmp(t_buf,t_buffer)>=0) if(1) { printf("日期操作相等ok!\n"); } else { printf("期操作不等 exit!\n"); } //---------------------------- //關閉加密鎖 OK printf("關閉鎖中..."); retcode = Rockey(RY_CLOSE, &handle, &lp1, &lp2, &p1, &p2, &p3, &p4, buffer); if (retcode) { printf("關閉鎖出錯,Error Code: %d\n", retcode); return -1; } printf("關閉鎖完成!\n"); //---------------------------- printf("暫停"); int temp=getchar(); return 0; } //顯示錯誤信息函數 void ShowERR(WORD retcode) { if (retcode == 0) return; printf("Error Code: %d,Error Info:%s\n", retcode,GetERR_Cn(retcode)); } //16進制轉字符串函數 void HexBufferToString(char* str,BYTE* buf,int len) { int k; sprintf(str,"0x"); for( k=0;k<len;k++) { char strTemp[20]; sprintf(strTemp,"%02x",buf[k]); strcat(str,strTemp); } } //WORD轉字符串函數 char* word2cp(WORD value) { char* s=new char[sizeof(value)]; sprintf(s,"%d",value); char* ret_s=new char[strlen(s)]; strcpy(ret_s,s); return ret_s; } //實現 合并字符串函數 char* UnionStr(const char* A,const char* B) { int len=0; len=strlen(A)+strlen(B)+1; char* result=new char[len]; memset(result,0,len); sprintf(result, "%s%s",A,B); char* r=new char[strlen(result)+1]; strcpy(r,result); // return r; } //合并字符串函數 char* strcat_lc(const char* A,const char* B) { return UnionStr(A,B); } //合并2參數 char* a2u(const char* A,const char* B) { return strcat_lc(A,B); } //合并3參數 char* a3u(const char* A,const char* B,const char* C) { char* t=strcat_lc(A,B); t=strcat_lc(t,C); return t; } //獲取錯誤信息的中文信息函數 char* GetERR_Cn(WORD retcode) { char* r=NULL; char* rc=word2cp(retcode); // 錯誤碼 switch(retcode) { case ERR_SUCCESS: //0 r="沒有錯誤"; break; case ERR_NO_ROCKEY: //3 r="沒有ROCKEY"; break; case ERR_INVALID_PASSWORD: //4 r="有ROCKEY鎖,但基本密碼錯"; break; case ERR_INVALID_PASSWORD_OR_ID: //5 r="錯誤的密碼或硬件 ID"; break; case ERR_SETID: //6 r="設置硬件 ID 錯"; break; case ERR_INVALID_ADDR_OR_SIZE: //7 r="讀寫地址或長度有誤"; break; case ERR_UNKNOWN_COMMAND: //8 r="沒有此命令"; break; case ERR_NOTBELEVEL3: //9 r="內部錯誤"; break; case ERR_READ: //10 r="讀數據錯"; break; case ERR_WRITE: //11 r="寫數據錯"; break; case ERR_RANDOM: //12 r="隨機數錯"; break; case ERR_SEED: //13 r="種子碼錯"; break; case ERR_CALCULATE: //14 r="計算錯"; break; case ERR_NO_OPEN: //15 r="在操作前沒有打開鎖"; break; case ERR_OPEN_OVERFLOW: //16 r="打開的鎖太多(>16)"; break; case ERR_NOMORE: //17 r="找不到更多的鎖"; break; case ERR_NEED_FIND: //18 r="沒有 Find 直接用了 FindNext"; break; case ERR_DECREASE: //19 r="遞減錯"; break; case ERR_AR_BADCOMMAND: //20 r="算法指令錯"; break; case ERR_AR_UNKNOWN_OPCODE: //21 r="算法運算符錯"; break; case ERR_AR_WRONGBEGIN: //22 r="算法第一條指令含有常數"; break; case ERR_AR_WRONG_END: //23 r="算法最后一條指令含有常數"; break; case ERR_AR_VALUEOVERFLOW: //24 r="算法中常數值 > 63"; break; case ERR_TOOMUCHTHREAD: //25 r="同一個進程中打開鎖的線程數 > 100"; break; case ERR_INVALID_RY4S: //30 r="試圖對非Rockey4Smart的鎖進行操作"; break; case ERR_INVALID_PARAMETER: //31 r="不合法的參數"; break; case ERR_INVALID_TIMEVALUE: //32 r="不合法的時間值"; break; default: r=rc; break; } return r; } //
--the--end--
--vp:hsg
--create date:2012-04-25