测试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.mzph.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发表了一篇标题为“神经…