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

测试Rockey 4 Smart加密锁的C语言代码相关推荐

  1. 测试Rockey 4 Smart加密锁的.Net C#语言代码

    测试Rockey 4 Smart加密锁的.Net C#语言代码 public enum Ry4Cmd : ushort { RY_FIND = 1, //Find Ry4S RY_FIND_NEXT, ...

  2. java 与c 运行效率_Java语言与C语言代码运行效率的比较

    <Java语言与C语言代码运行效率的比较>由会员分享,可在线阅读,更多相关<Java语言与C语言代码运行效率的比较(2页珍藏版)>请在人人文库网上搜索. 1.Java语言与C语 ...

  3. c语言错误 xef代表什么,单片机C语言代码手册 含100多个经典C程序

    1 单片机单片机 C 语言代码手册语言代码手册 1 LED 灯灯 点亮一个点亮一个 LED include void main while 1 P0 0 x01 P2 0 x7d 流水灯闪烁流水灯闪烁 ...

  4. c 语言怎么编译 .dll,将你的 C 语言代码编译成 .NET

    介绍 通常情况下,对于那些使用C语言编程并开始用C#/ VB或一些其他的用于.NET的编译语言编程,那么他们希望或者甚至是需要调用我们用C语言编写的函数代码. 每当我在互联网上钻研,或说要在编译器中使 ...

  5. 语言代码编程大赛简讯_精品干货:C语言的高效编程与代码优化

    在本篇文章中,我收集了很多经验和方法.应用这些经验和方法,可以帮助我们从执行速度和内存使用等方面来优化C语言代码. 简介 在最近的一个项目中,我们需要开发一个运行在移动设备上但不保证图像高质量的轻量级 ...

  6. 浅析VS2010反汇编 VS 反汇编方法及常用汇编指令介绍 VS2015使用技巧 调试-反汇编 查看C语言代码对应的汇编代码...

    浅析VS2010反汇编 2015年07月25日 21:53:11 阅读数:4374 第一篇 1. 如何进行反汇编 在调试的环境下,我们可以很方便地通过反汇编窗口查看程序生成的反汇编信息.如下图所示. ...

  7. 如何让nginx执行python代码_生产环境部署Python语言代码(django+uwsgi+nginx)

    本文主要向大家介绍了生产环境部署Python语言代码(django+uwsgi+nginx),通过具体的内容向大家展示,希望对大家学习Python语言有所帮助. 基础环境不做介绍,在django开发w ...

  8. 用四位led数码管作显示器的篮球比赛24秒计时器求c语言代码,单片机编程控制LED七段数码管作显示的篮球赛计时计分系统...

    本次设计用由AT89C51编程控制LED七段数码管作显示的球赛计时计分系统.系统应具有赛程定时设置,赛程时间暂停,及时刷新甲.乙双方的成绩以及赛后成绩暂存等功能. 内容包括:显示.键盘.时钟等内容设计 ...

  9. 构建线性表的c语言代码,数据结构严蔚敏C语言版—线性表顺序存储结构(顺序表)C语言实现相关代码...

    1.运行环境 这里说明一下这里所有的C语言代码都是基于code::blocks 20.03编译运行的.当然一些其他集成开发环境应该也是可以的,个人不太喜欢功能太过强大的IDE,因为那同样意味着相关设置 ...

最新文章

  1. html5圆形图片轮播,jQuery超酷响应式圆形图片轮播图特效
  2. 程序代码移植和烧录需要注意什么_水电装修需要什么材料 水电装修需要注意什么...
  3. 创建型模式--单例模式
  4. JavaScript(19)jQuery HTML 获取和设置内容和属性
  5. c语言printf%%,c语言printf实现同一位置打印输出的实例分享
  6. const debug = require(‘debug‘)(‘cnpm‘)
  7. 点对点信道互连以太网实验_以太网防雷器通讯参数测试(二)——防雷器对高速链路影响的参数...
  8. 冒死揭秘安利_赵丽颖新剧开播备受争议?冒死安利
  9. 以外的文件 删除_原来C盘还可以删除这五个文件,难怪电脑越来越卡!
  10. TD-SCDMA智能天线波束赋形能力的讨论
  11. Java 数组及多维数组
  12. 想赚钱,需要脑袋能开窍
  13. Git for Windows安装和基本设置
  14. 【编译原理笔记01】什么是编译,编译系统各结构作用
  15. 2022-2028全球新冠检测试剂行业调研及趋势分析报告
  16. php微博批量管理工具,简单快速批量取消微博的关注
  17. Cygwin的安装及csh的配置和使用(批量下载FNL数据方法)
  18. linux 直流电机驱动设计,嵌入式Linux直流电机驱动.PPT
  19. 逆水寒能不能网页预约服务器,不是说《逆水寒》凉了吗,为什么新服预约不到1小时就满了?...
  20. idrac虚拟控制台的使用

热门文章

  1. 添加删除约束脚本 ::fn_get_sql
  2. 如何用代码对repeating section控件新增Item(InfoPath)
  3. [LaunchPad] 超声波测试,数码管显示
  4. 计算机基础知识:什么是位、字节、字、KB、MB
  5. 怎么查看linux服务器有cpu
  6. php调用image类提示不存在的字体,php – 无效的字体文件名(imagettfbox)
  7. C#程序将DLL包进EXE方法
  8. python中排序从小到大_从Python看排序:冒泡排序
  9. 电脑计算器_CPA考生注意!2020考场只允许带这种计算器
  10. linux树莓派 ssh密码,树莓派之SSH连接经验