测试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