測試Rockey 4 Smart加密鎖的C語言代碼

測試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

轉載于:https://www.cnblogs.com/sqlite3/archive/2012/04/26/2566707.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/379764.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/379764.shtml
英文地址,請注明出處:http://en.pswp.cn/news/379764.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

C——任意一個偶數分解兩個素數

題目&#xff1a;一個偶數總能表示為兩個素數之和 以上實例運行輸出結果為&#xff1a; 請輸入一個偶數: 4 偶數4可以分解成1和3兩個素數的和 #include <stdio.h> #include <stdlib.h> int Isprimer(int n); int main() {int n,i;do{printf("請輸入一個偶數&…

c#委托調用另一窗口函數_在C#中使用委托調用成員函數

c#委托調用另一窗口函數Prerequisite: Delegates in C# 先決條件&#xff1a; C&#xff03;中的代表 We can also call a member function of a class using delegates. It is similar to static function calls, here we have to pass member function using an object on t…

Java版AVG游戲開發入門[0]——游戲模式轉換中的事件交互

Java版AVG游戲開發入門[0]——游戲模式轉換中的事件交互 示例程序下載地址&#xff1a;http://download.csdn.net/source/999273&#xff08;源碼在jar內&#xff09; AVG&#xff0c;即Adventure Game&#xff0c;可以直譯為[冒險游戲]。但是通常情況下我們說AVG是指[文字冒險…

FreeRTOS任務創建和刪除

任務創建和刪除的API函數 xTaskCreate()&#xff1a;使用動態方法創建一個任務xTaskCreateStatic()&#xff1a;使用靜態方法創建一個任務xTaskCreateRestricated()&#xff1a;創建一個使用MPU進行限制的任務&#xff0c;相關內存使用動態內存分配vTaskDelete()&#xff1a;刪…

Delphi 調試

調試&#xff1a;F9執行F8逐過程單步調試F7逐語句單步調試轉載于:https://www.cnblogs.com/JackShao/archive/2012/04/30/2476931.html

1.創建單項鏈表

# include <stdio.h> # include <malloc.h> # include <stdlib.h>typedef struct Node{int data;//數據域struct Node *pNext;//指針域}NODE, *PNODE; //NODE等價于struct Node //PNOD等價于struct Node * //函數聲明PNODE create_list(void); void traverse…

python 日本就業_日本的繪圖標志 Python中的圖像處理

python 日本就業Read basics of the drawing/image processing in python: Drawing flag of Thailand 閱讀python中繪圖/圖像處理的基礎知識&#xff1a; 泰國的繪圖標志 The national flag of Japan is a rectangular white banner bearing a crimson-red disc at its center…

[windows phone 7 ]查看已安裝程序GUID

首先介紹下wp7RootToolsSDK,這個功能相當強大&#xff0c;適合研究wp7高級功能。 它支持File&#xff0c;Register操作&#xff0c;比之前的COM調用要簡單&#xff0c;方便。 功能:查看已安裝程序的guid 開發心得: 用的是mozart,rom多&#xff0c;刷機吧&#xff0c;最麻煩的是…

FreeRTOS任務掛起和恢復

任務掛起&#xff1a;暫停某個任務的執行 任務恢復&#xff1a;讓暫停的任務繼續執行 通過任務掛起和恢復&#xff0c;可以達到讓任務停止一段時間后重新運行。 相關API函數&#xff1a; vTaskSuspend void vTaskSuspend( TaskHandle_t xTaskToSuspend );xTaskToSuspend &am…

向oracle存儲過程中傳參值出現亂碼

在頁面中加入<meta http-equiv"Content-Type" content"text ml;charsetUTF-8"/>就可以解決這一問題 適用情況&#xff1a; 1.中文 2.特殊符號 轉載于:https://www.cnblogs.com/GoalRyan/archive/2009/02/16/1391348.html

Scala程序將多行字符串轉換為數組

Scala | 多行字符串到數組 (Scala | Multiline strings to an array) Scala programming language is employed in working with data logs and their manipulation. Data logs are entered into the code as a single string which might contain multiple lines of code and …

SQL 異常處理 Begin try end try begin catch end catch--轉

SQL 異常處理 Begin try end try begin catch end catch 總結了一下錯誤捕捉方法:try catch ,error, raiserror 這是在數據庫轉換的時候用的的異常處理, Begin TryInsert into SDT.dbo.DYEmpLostTM(LogDate,ProdGroup,ShiftCode,EmployeeNo,MONo,OpNo,OTFlag,LostTypeID,OffStd…

FreeRTOS中斷配置與臨界段

Cortex-M中斷 中斷是指計算機運行過程中&#xff0c;出現某些意外情況需主機干預時&#xff0c;機器能自動停止正在運行的程序并轉入處理新情況的程序&#xff08;中斷服務程序&#xff09;&#xff0c;處理完畢后又返回原被暫停的程序繼續運行。Cortex-M內核的MCU提供了一個用…

vector向量容器

一、vector向量容器 簡介&#xff1a; Vector向量容器可以簡單的理解為一個數組&#xff0c;它的下標也是從0開始的&#xff0c;使用時可以不用確定大小&#xff0c;但是它可以對于元素的插入和刪除&#xff0c;可以進行動態調整所占用的內存空間&#xff0c;它里面有很多系統…

netsh(二)

netsh 來自微軟的網絡管理看家法寶很多時候&#xff0c;我們可能需要在不同的網絡中工作&#xff0c;一遍又一遍地重復修改IP地址是一件比較麻煩的事。另外&#xff0c;系統崩潰了&#xff0c;重新配置網卡等相關參數也比較煩人&#xff08;尤其是無線網卡&#xff09;。事實上…

java uuid靜態方法_Java UUID getLeastSignificantBits()方法與示例

java uuid靜態方法UUID類getLeastSignificantBits()方法 (UUID Class getLeastSignificantBits() method) getLeastSignificantBits() method is available in java.util package. getLeastSignificantBits()方法在java.util包中可用。 getLeastSignificantBits() method is us…

Google C2Dm相關文章

Android C2DM學習——云端推送&#xff1a;http://blog.csdn.net/ichliebephone/article/details/6591071 Android C2DM學習——客戶端代碼開發&#xff1a;http://blog.csdn.net/ichliebephone/article/details/6626864 Android C2DM學習——服務器端代碼開發&#xff1a;http…

FreeRTOS的列表和列表項

列表和列表項 列表 列表是FreeRTOS中的一個數據結構&#xff0c;概念上和鏈表有點類型&#xff0c;是一個循環雙向鏈表&#xff0c;列表被用來跟蹤FreeRTOS中的任務。列表的類型是List_T&#xff0c;具體定義如下&#xff1a; typedef struct xLIST {listFIRST_LIST_INTEGRI…

string基本字符系列容器

二、string基本字符系列容器 簡介&#xff1a;C語言只提供了一個char類型來處理字符&#xff0c;而對于字符串&#xff0c;只能通過字符串數組來處理&#xff0c;顯得十分不方便。CSTL提供了string基本字符系列容器來處理字符串&#xff0c;可以把string理解為字符串類&#x…

正則表達式(一)

正則表達式概述 1.1什么是正則表達式&#xff1f; 正則表達式(Regular Expression)起源于人類神經系統的早期研究。神經生理學家Warren McCulloch和Walter Pitts研究出一種使用數學方式描述神經網絡的方法。1956年&#xff0c;數學家Stephen Kleene發表了一篇標題為“神經…