123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745 |
- #include "StdAfx.h"
- #include "Encryptlock.h"
- namespace Encryptlockkernel
- {
- CHAR *g_pHReadPassWord = NULL;
- CHAR *g_pLReadPassWord = NULL;
- CHAR *g_pHWritePassWord = NULL;
- CHAR *g_pLWritePassWord = NULL;
- BOOL g_bUSE_NEWPASSWORD = FALSE;
- // 加密解密密钥;
- CHAR *g_szEncKey[][4] = {
- {"5A11475E", "39F530AD", "DCE97937", "6BCDB275"}, // 儿童全能版;
- {"04BBE109", "E3AFEA47", "778414D1", "16785D1F"}, // 儿童座席版;
- {"4900364D", "28E42F9C", "CBD86826", "5ACCA264"}, // 儿童企业版;
- {"BA7DA71F", "A17DB814", "C411F1AE", "A34531FD"}, // 婚纱全能版;
- {"F3A690F8", "828AD936", "667E03C0", "05674C0E"}, // 婚纱座席版;
- {"EC9FC9E1", "773E7E16", "0612A764", "A907E0F2"} // 婚纱企业版;
- };
- CHAR *g_szRom[] = {
- "9E5B96F2223FCF8CC12308DABF669CB4", // 000
- "873A748B773F7E261623B775A907F0F3", // 033
- "7C2359705B1752BEEEFB9B4816785D2F", // 066
- "4EF5EF37D1D91881B0CD5D1F44B19659", // 099
- "CA7DA7CF9951A0493845DA97DC391325", // 132
- "1CD3CD15BFB7F66F9EAB3BFD118E6326", // 165
- "3EE5DF32D1991480607D5D0E4F614658", // 198
- "4FB2FC03EEAA2592819E2EDC1072676A" // 231
- // 264 是座席数使用的地址;
- // 297 是域名值使用的地址;
- // 330 是医院系统使用的地址;
- };
- CHAR *g_szPassword[][2] = {
- //////////////////////////////////////////////////////////////////////////
- // 旧密码;
- { "7528527A", "541C5CF4"}, // 读密码 高低;
- { "E4F08542", "87E5CED0"}, // 写密码 高低;
- //////////////////////////////////////////////////////////////////////////
- // 新密码;
- { "9201B009", "26B43D72"}, // 读密码 高低;
- { "AA679BD9", "302B1952"} // 写密码 高低;
- };
- // 用户自定义密钥;
- CHAR *g_szUserKey = { "20D30D15FFB7F6AF9EAB30FD229F797B" };
- //////////////////////////////////////////////////////////////////////////
- // 锁内存数据;
- BYTE g_byShotVersion[][10] =
- {
- { 0x06, 0x00, 0xC2, 0xC7, 0xD2, 0x43, 0xB9, 0x01, 0x8A, 0xC3 }, // 儿童全能版;
- { 0x06, 0x00, 0x94, 0x0B, 0xCD, 0x32, 0x04, 0xAB, 0x20, 0x27 }, // 儿童座席版;
- { 0x06, 0x00, 0x04, 0xBB, 0x67, 0x0A, 0x3B, 0xA9, 0xF0, 0xDC }, // 儿童企业版;
- { 0x06, 0x00, 0xBC, 0x91, 0x64, 0x2F, 0x9A, 0xB1, 0x22, 0xCD }, // 婚纱全能版;
- { 0x06, 0x00, 0x04, 0x1D, 0x18, 0xF7, 0xBD, 0x5F, 0x53, 0x4C }, // 婚纱座席版;
- { 0x06, 0x00, 0x89, 0xA0, 0xE6, 0xAD, 0xCA, 0x02, 0x75, 0x8E } // 婚纱企业版;
- };
- // start---------------加密表达式加密后的数组----------------------;
- CONST BYTE g_byCalExVersion[][114] =
- {
- // 儿童全能版;
- { 109, 0, 26, 222, 0, 239, 199, 199, 188, 225, 180, 168, 178, 208, 21, 79, 62, 90, 51, 31, 88, 128, 180, 105, 53, 137, 230, 254, 244, 50, 195,
- 49, 167, 143, 168, 125, 130, 125, 8, 73, 224, 120, 80, 95, 178, 49, 44, 158, 38, 38, 247, 169, 62, 187, 119, 192, 77, 194, 118, 246, 133, 241,
- 157, 62, 144, 24, 94, 173, 49, 192, 46, 250, 249, 239, 82, 78, 135, 3, 86, 154, 8, 135, 180, 168, 178, 208, 21, 79, 62, 90, 51, 31, 88,
- 128, 180, 105, 53, 137, 230, 254, 244, 50, 195, 49, 167, 143, 241, 214, 38, 180, 198, 3, 158, 165 },
- // 儿童座席版;
- { 109, 0, 90, 15, 108, 138, 37, 190, 82, 8, 20, 252, 32, 162, 7, 8, 254, 255, 56, 245, 194, 4, 46, 120, 49, 120, 156, 27, 17, 164, 217,
- 79, 167, 146, 197, 69, 55, 117, 197, 149, 42, 217, 151, 195, 254, 145, 187, 197, 232, 188, 114, 223, 40, 229, 151, 245, 116, 177, 141, 94, 134, 14,
- 13, 169, 165, 94, 5, 216, 235, 60, 176, 38, 174, 121, 187, 174, 16, 30, 17, 20, 246, 34, 20, 252, 32, 162, 7, 8, 254, 255, 56, 245, 194,
- 4, 46, 120, 49, 120, 156, 27, 17, 164, 217, 79, 167, 146, 143, 132, 219, 173, 211, 2, 99, 180 },
- // 儿童企业版;
- { 109, 0, 229, 36, 223, 222, 213, 46, 70, 55, 240, 207, 237, 75, 226, 68, 133, 100, 42, 119, 89, 131, 79, 104, 158, 17, 172, 239, 4, 158, 201,
- 51, 62, 51, 94, 232, 14, 124, 81, 64, 100, 141, 187, 85, 156, 59, 205, 116, 200, 24, 108, 218, 145, 22, 7, 36, 45, 7, 156, 255, 170, 130,
- 165, 140, 99, 216, 120, 72, 171, 196, 27, 49, 138, 199, 137, 246, 214, 247, 121, 114, 215, 199, 240, 207, 237, 75, 226, 68, 133, 100, 42, 119, 89,
- 131, 79, 104, 158, 17, 172, 239, 4, 158, 201, 51, 62, 51, 248, 214, 27, 254, 221, 208, 181, 209 },
-
- // 婚纱全能版;
- { 109, 0, 139, 145, 163, 176, 66, 18, 207, 79, 172, 200, 12, 124, 89, 151, 248, 238, 26, 85, 137, 146, 119, 58, 76, 194, 151, 239, 204, 104, 18,
- 166, 208, 54, 37, 85, 3, 174, 28, 74, 154, 156, 120, 194, 8, 112, 79, 42, 27, 89, 81, 95, 238, 74, 59, 199, 160, 101, 117, 179, 51, 138,
- 70, 176, 239, 182, 160, 212, 11, 33, 224, 74, 155, 143, 216, 10, 220, 71, 8, 168, 18, 175, 172, 200, 12, 124, 89, 151, 248, 238, 26, 85, 137,
- 146, 119, 58, 76, 194, 151, 239, 204, 104, 18, 166, 208, 54, 114, 118, 181, 24, 252, 41, 246, 88 },
- // 婚纱座席版;
- { 109, 0, 128, 13, 164, 143, 252, 87, 30, 48, 20, 21, 145, 114, 160, 96, 49, 127, 181, 32, 144, 213, 109, 99, 142, 219, 71, 26, 22, 220, 177,
- 179, 191, 82, 138, 45, 173, 160, 9, 83, 162, 106, 182, 175, 47, 92, 214, 78, 93, 21, 202, 165, 167, 200, 198, 172, 218, 74, 236, 194, 194, 228,
- 40, 27, 95, 60, 160, 173, 66, 185, 178, 7, 159, 220, 58, 71, 140, 19, 20, 37, 66, 84, 20, 21, 145, 114, 160, 96, 49, 127, 181, 32, 144,
- 213, 109, 99, 142, 219, 71, 26, 22, 220, 177, 179, 191, 82, 232, 182, 45, 27, 13, 195, 225, 204 },
- // 婚纱企业版;
- { 109, 0, 94, 220, 40, 182, 30, 120, 56, 193, 78, 101, 1, 144, 68, 206, 192, 52, 67, 9, 243, 20, 9, 195, 153, 15, 22, 217, 243, 79, 177,
- 22, 24, 171, 185, 157, 172, 67, 117, 124, 153, 165, 3, 41, 218, 47, 149, 150, 48, 152, 75, 250, 204, 253, 92, 53, 121, 147, 242, 140, 80, 66,
- 34, 194, 16, 109, 237, 17, 222, 161, 96, 8, 11, 194, 58, 45, 86, 15, 207, 121, 247, 104, 78, 101, 1, 144, 68, 206, 192, 52, 67, 9, 243,
- 20, 9, 195, 153, 15, 22, 217, 243, 79, 177, 22, 24, 171, 122, 243, 190, 146, 77, 222, 208, 129 }
- };
- // endof---------------加密表达式加密后的数组----------------------;
- CONST YtError g_YtError[] = {
- {-1, _T("未找到返回结果变量\n")},
- {-2, _T("未找到 = 符号\n")},
- {-3, _T("代表没有找到相应常数\n")},
- //{-4, _T("未找到返回结果变量\n")},
- {-5, _T("代表找不到字符串的第一个双引号\n")},
- {-6, _T("代表找不到字符串的第二个双引号\n")},
- {-7, _T("IF语句没有找到goto字符\n")},
- {-8, _T("IF语句没有找到第一个比较字符\n")},
- {-9, _T("IF语句没有找到比较符号\n")},
- {-10, _T("两边变量类型不相符\n")},
- {-11, _T("没有找到NOT符号\n")},
- {-12, _T("不是整形变量\n")},
- {-13, _T("代表没有找到相应整形常数\n")},
- {-14, _T("代表没有找到相应字符串常数\n")},
- {-15, _T("代表没有找到相应浮点常数\n")},
- {-16, _T("代表不支持这个运算\n")},
- {-17, _T("代表没有左边括号\n")},
- {-18, _T("代表没有变量\n")},
- {-19, _T("代表没“,”\n")},
- {-20, _T("代表没有右边括号\n")},
- {-21, _T("代表常数超过指这定的范围\n")},
- {-22, _T("代表储存器的地址超过指定的范围,整数不能超过EEPROM_LEN-4,浮点不能超过EEPROM_LEN-8\n")},
- {-23, _T("代表储存器的地址超过指定的范围,字符串不能超过EEPROM_LEN-LEN,其中LEN为字符串的长度\n")},
- {-24, _T("除法中,被除数不能为0\n")},
- {-25, _T("未知错误\n")},
- {-26, _T("第二个变量不在指定的位置\n")},
- {-27, _T("字符串常量超过指定的长度\n")},
- {-28, _T("不是字符串变量\n")},
- {-29, _T("没有第三个变量\n")},
- {-30, _T("GOTO的标识语句不能全为数字\n")},
- {-31, _T("不能打开ENC文件\n")},
- {-32, _T("不能读ENC文件\n")},
- {-33, _T("GOTO CALL不能找到指定的跳转位置\n")},
- {-34, _T("智能卡运算中,未知数据类型\n")},
- {-35, _T("智能卡运算中,未知代码类型\n")},
- {-36, _T("字符串长度超出50\n")},
- {-37, _T("操作时超长,负长\n")},
- {-38, _T("标识重复\n")},
- {-39, _T("程序堆栈溢出\n")},
- {-40, _T("堆栈溢出\n")},
- {-41, _T("不能建立编译文件,请查看文件是否有只读属性,或被其它文件打开\n")},
- {-42, _T("不能写文件,请查看文件是否有只读属性,或被其它文件打开\n")},
- {-43, _T("程序被中途使用END语句结束\n")},
- {-44, _T("程序跳转到外部的空间\n")},
- {-45, _T("传送数据失败\n")},
- {-46, _T("程序超出运算次数,可能是死循环\n")},
- {-47, _T("写密码不正确\n")},
- {-48, _T("读密码不正确\n")},
- {-49, _T("读写EEPROM时,地址溢出\n")},
- {-50, _T("USB操作失败,可能是没有找到相关的指令\n")},
- {-51, _T("打开USB文件句柄失败\n")},
- {-52, _T("使用加密锁加密自定义表达式,生成加密代码时生产错误\n")},
- {-53, _T("无法打开usb设备,可能驱动程序没有安装或没有插入加密锁\n")},
- //{-54, _T("未找到返回结果变量\n")},
- {-55, _T("要加密的数据少于8个字节\n")},
- {-56, _T("返回结果变量错误\n")},
- {-57, _T("初始化密钥错误\n")},
- {-58, _T("e密钥或n模不能为0\n")},
- {-59, _T("初始化MD5错误\n")},
- {-60, _T("MD5运算错误\n")},
- {-61, _T("计算MD5结果时错误\n")},
- {-62, _T("授权次数溢出,不能再进行授权\n")},
- {-63, _T("不能打开指定的文件\n")},
- {-64, _T("不能建立指定的文件\n")},
- {-65, _T("验证码错误,可能是输入解密密钥错误,或注册授权码错误\n")},
- {-66, _T("执行TIMEOUT函数时,输入的ID与锁ID不相符\n")},
- {-67, _T("执行TIMEOUT函数时,智能卡运行函数已到期\n")},
- {-68, _T("操作浮点运算时,输入的参数将会导致返回值是一个无穷值\n")},
- {-69, _T("代表没足够的变量参数\n")},
- {-70, _T("返回变量与函数不相符\n")},
- {-71, _T("浮点数转换字符串时,要转换的数据太大\n")},
- {-72, _T("初始化服务器错误\n")},
- {-73, _T("对缓冲区进行MD5运算时错误\n")},
- {-74, _T("MD5验证IPVAR错误\n")},
- {-75, _T("MD5验证IPCount错误\n")},
- {-76, _T("没有找到对应的SOCKET连接\n")},
- {-77, _T("没有找到要删除的对应的SOCKET连接\n")},
- {-78, _T("没有找到要删除的对应的功能模块号连接\n")},
- {-79, _T("没有找到要增加的对应的功能模块号连接\n")},
- {-80, _T("用户数已超过限制的授权数量\n")},
- {-81, _T("找不到对应的INI文件条目\n")},
- {-82, _T("没有进行初始化服务工作\n")},
- {-83, _T("ref不能应用于常数\n")},
- {-84, _T("代表使用scall,ccall等指令时,传递的参数太多\n")},
- {-85, _T("表示调用scall,ccall,sloadlib,cloadlib等指令时,不能返回运行代码\n")},
- {-86, _T("表示调用scall,ccall,sloadlib,cloadlib等指令时,不能将结果变量返回\n")},
- {-87, _T("表示调用外部DLL时,不能读取指定的DLL\n")},
- {-88, _T("表示调用外部DLL时,不能获取对应函数所在的地址\n")},
- //{-89, _T("未找到返回结果变量\n")},
- //////////////////////////////////////////////////////////////////////////
- {-252, _T("密码不正确\n")},
- {-253, _T("打开加密锁时PIN码错误\n")},
- {-254, _T("设置PIN码错误\n")},
- {-255, _T("操作加密锁时没有进行PIN操作\n")},
- //////////////////////////////////////////////////////////////////////////
- {-1052, _T("可能是输入的授权号不正确\n")},
- {-1053, _T("系统上没有任何智能锁\n")},
- {-1088, _T("发送数据错误\n")},
- {-1089, _T("获取数据错误\n")},
- {-1092, _T("找不到对应的服务端操作码\n")},
- {-1093, _T("表示连接服务时错误\n")},
- {-1095, _T("获取主机名称失败\n")},
- {-1097, _T("建立套字接错误\n")},
- {-1098, _T("绑定套字节端口错误\n")},
- {-1099, _T("表示无效连接,不能进行相关的操作\n")},
- {-2002, _T("表示监听时产生错误\n")},
- {-2003, _T("表示发送的数据长度与接收的数据长度不相符\n")},
- {-2005, _T("表示当前服务不存在任何连接\n")},
- {-2006, _T("表示当前查询节点超出集合范范围\n")},
- {-2009, _T("表示关闭连接错误\n")},
-
- //////////////////////////////////////////////////////////////////////////
- {-10000,_T("未知错误代码\n")}
- };
- CHAR g_szKeyPath[MAX_PATH] = {0};
- void ReSetPassWord()
- {
- if ( !g_bUSE_NEWPASSWORD )
- {
- g_pHReadPassWord = g_szPassword[0][0];
- g_pLReadPassWord = g_szPassword[0][1];
- g_pHWritePassWord = g_szPassword[1][0];
- g_pLWritePassWord = g_szPassword[1][1];
- }
- else
- {
- g_pHReadPassWord = g_szPassword[2][0];
- g_pLReadPassWord = g_szPassword[2][1];
- g_pHWritePassWord = g_szPassword[3][0];
- g_pLWritePassWord = g_szPassword[3][1];
- }
- }
- BOOL ReadYtInfoVer1(IN CONST INT &nUSBStartPos, OUT YtInfoVer1 &Infover1, OUT INT &nUSBPort, OUT CHAR* pszKeyPath, IN CONST INT &nKeypath)
- {
- INT nRetval = 0;
- INT nVal[8] = { 0 };
- DOUBLE fVal[8] = { 0.0 };
- CHAR s0[50] = "", s1[50] = "", s2[50] = "", s3[50] = "", s4[50] = "", s5[50] = "", s6[50] = "", s7[50] = "";
- BOOL bFind = FALSE;
- CHAR szKeyPath[MAX_PATH] = "";
- for (INT nIndex = nUSBStartPos; nIndex < 256; nIndex++)
- {
- memset(szKeyPath, 0, sizeof(szKeyPath));
- nRetval = FindPort(nIndex, szKeyPath);
- if (nRetval != 0 && nIndex == 0)
- {
- GetYtUSBKey32ErrInfo(nRetval);
- continue;
- }
- if (nRetval != 0)
- {
- GetYtUSBKey32ErrInfo(nRetval);
- continue;
- }
- for (int i = 0; i < 6; i++)
- {
- // 使用该设备路径锁进行运算;
- nRetval = CalEx(g_byShotVersion[i], 10,
- &nVal[0], &nVal[1], &nVal[2], &nVal[3], &nVal[4], &nVal[5], &nVal[6], &nVal[7],
- &fVal[0], &fVal[1], &fVal[2], &fVal[3], &fVal[4], &fVal[5], &fVal[6], &fVal[7],
- s0, s1, s2, s3, s4, s5, s6, s7, szKeyPath, 20000);
- //如果正确,则返回该设备路径供以后使用;
- if (nRetval == -63) continue;
- if ((nRetval == 0) && (nVal[0] == 123))
- {
- nUSBPort = nIndex;
- if (pszKeyPath)
- sprintf_s(pszKeyPath, nKeypath, "%s",szKeyPath);
- bFind = TRUE;
- Infover1.nSoftVer = i;
- // 获取加密锁座席数量;
- if ( (nRetval = YtReadString(Infover1.szCCount, 264, ENCRYPT_BLOCK_LEN, g_pHReadPassWord, g_pLReadPassWord, szKeyPath)) != 0 )
- GetYtUSBKey32ErrInfo(nRetval);
-
- // 获取加密锁域名值;
- if ( (nRetval = YtReadString(Infover1.szBranchId, 297, ENCRYPT_BLOCK_LEN, g_pHReadPassWord, g_pLReadPassWord, szKeyPath)) != 0)
- GetYtUSBKey32ErrInfo(nRetval);
- // 获取医院跟踪系统;
- if ( (nRetval = YtReadString(Infover1.szHospital, 330, ENCRYPT_BLOCK_LEN, g_pHReadPassWord, g_pLReadPassWord, szKeyPath)) != 0)
- GetYtUSBKey32ErrInfo(nRetval);
- // 返回加密锁已运行时间;
- if ( (nRetval = GetRunTimer(Infover1.szHasRunyears, Infover1.szHasRunmonths, Infover1.szHasRundays, Infover1.szHasRunhours, Infover1.szHasRunminutes, Infover1.szHasRunseconds, szKeyPath)) != 0)
- GetYtUSBKey32ErrInfo(nRetval);
- // 返回加密锁可运行时间;
- DWORD dwShortID = 0; // 锁短ID;
- CHAR szOutString[100] = {0};
- CHAR HKey[50] = {0}, LKey[50] = {0};
- // 30000以后的储存空间为公共区域;
- if ( (nRetval = ReadTimeAuthFromEprom(HKey, LKey, szOutString, &dwShortID, 30128, "FFFFFFFF", "FFFFFFFF", szKeyPath)) != 0)
- GetYtUSBKey32ErrInfo(nRetval);
- std::string str = szOutString;
- int nStrPos = str.find("年");
- if ( nStrPos != std::string::npos )
- {
- sprintf_s(Infover1.szCanRunyears, "%s", str.substr(0,nStrPos).c_str());
- str = str.substr(nStrPos + strlen("年"));
- nStrPos = str.find("月");
- sprintf_s(Infover1.szCanRunmonths, "%s", str.substr(0,nStrPos).c_str());
- str = str.substr(nStrPos + strlen("月"));
- nStrPos = str.find("日");
- sprintf_s(Infover1.szCanRundays, "%s", str.substr(0,nStrPos).c_str());
- str = str.substr(nStrPos + strlen("日"));
- nStrPos = str.find("小时");
- sprintf_s(Infover1.szCanRunhours, "%s", str.substr(0,nStrPos).c_str());
- str = str.substr(nStrPos + strlen("小时"));
- nStrPos = str.find("分钟");
- sprintf_s(Infover1.szCanRunminutes, "%s", str.substr(0,nStrPos).c_str());
- //str = str.substr(nStrPos + strlen("分钟"));
- }
- break;
- }
- }
- if (bFind) break;
- }
- return bFind;
- }
- BOOL ModifyYtVer1Info(IN CHAR* pszKeypath, IN YtInfoVer1 &Infover1, IN CONST INT &nModifyType)
- {
- // 修改类型有:加减运行时间、加减座席数量、开通或关闭医院功能。
- switch(nModifyType)
- {
- case VER1_ADDCCOUNT:
- break;
- case VER1_MINUSCCOUNT:
- break;
- case VER1_HOSPITAL:
- break;
- case VER1_ADDTIME:
- break;
- case VER1_MINUSTIME:
- break;
- default:
- break;
- }
- return TRUE;
- }
- /************************************************************************/
- /*
- 函数:ClearEncryptlockInfo
- 描述:清空加密所有加密信息;
- 参数:
- [IN] nStartUSBPort 加密狗起始USB搜索位置;
- 返回:清除成功返回TRUE;
- */
- /************************************************************************/
- BOOL ClearEncryptlockInfo(IN const int &nStartUSBPort)
- {
- int nRet = 0;
- int nVersion = -1; // 锁版本;
- DWORD dwShortKey = 0; // 锁短ID;
- CHAR szKeyPath[MAX_PATH] = { 0 }; // USB锁物理位置;
- // 从nStartUSBPort的USB的位置开始查找加密锁;
- if (0 != FindPort(nStartUSBPort, szKeyPath))
- {
- // 返回非0表示失败;
- return FALSE;
- }
- // 返回锁的短ID及版本号;
- if (0 != GetIDVersion(&dwShortKey, &nVersion, szKeyPath))
- {
- // 返回非0表示失败;
- return FALSE;
- }
- if (dwShortKey == -1)
- {
- // 不是域天智能锁;
- return FALSE;
- }
- // 清空所有版本锁的rom空间地内容;
- CHAR szRom[ENCRYPT_BLOCK_LEN] = { 0 }; // 包含结束符;
- for (int i = 0; i < 11; i++)
- {
- nRet = YtWriteString(szRom, i * 33, g_pHWritePassWord, g_pLWritePassWord, szKeyPath);
- if (nRet <= 0)
- {
- // 执行失败;
- GetYtUSBKey32ErrInfo(nRet);
- }
- }
- // 清除写密码;
- nRet = SetWritePassword(g_pHWritePassWord, g_pLWritePassWord, "FFFFFFFF", "FFFFFFFF", szKeyPath);
- if ( nRet != 0)
- {
- // 执行失败;
- GetYtUSBKey32ErrInfo(nRet);
- AfxMessageBox(_T("清除写密码失败"));
- //return FALSE;
- }
- // 清除读密码;//设置读密码,必须用写密码;
- if ((nRet = SetReadPassword("FFFFFFFF", "FFFFFFFF", "FFFFFFFF", "FFFFFFFF", szKeyPath)) != 0)
- {
- // 执行失败;
- GetYtUSBKey32ErrInfo(nRet);
- AfxMessageBox(_T("清除读密码失败"));
- //return FALSE;
- }
- // 清空所有版本锁的加密解密的密钥;
- BOOL bErased = FALSE;
- for (int i = 0; i < 6; i++)
- {
- if (0 == ( nRet = WriteEncKey(g_szEncKey[i][0], g_szEncKey[i][1], g_szEncKey[i][2], g_szEncKey[i][3], "FFFFFFFF", "FFFFFFFF", "FFFFFFFF", "FFFFFFFF", szKeyPath)))
- {
- bErased = TRUE;
- break;
- }
- else
- {
- GetYtUSBKey32ErrInfo(nRet);
- }
- }
- if (!bErased)
- {
- AfxMessageBox(_T("清除加密锁失败,该锁可能已经清除过~"));
- }
- return TRUE;
- }
- BOOL FindYtUSB(OUT DWORD &dwShortKey, OUT INT &nVersion, OUT CHAR *pszKeyPath, IN CONST INT &nStartPort)
- {
- // 从nStartPort的USB的位置开始查找加密锁;
- if (0 != FindPort(nStartPort, pszKeyPath))
- return FALSE;
- // 返回锁的短ID及版本号;
- if (0 != GetIDVersion(&dwShortKey, &nVersion, pszKeyPath))
- return FALSE;
- return TRUE;
- }
- //////////////////////////////////////////////////////////////////////////
- /*
- 函数:CreateEncryptlockInfo
- 描述:生成指定版本的加密锁;
- 参数:
- IN: nStartPort 起始USB搜索位置;
- IN: nSoftVer 指定生成的加密狗版本信息;
- IN: nCCount 座席版连接数量;
- IN: bHospital 是否注册医院跟踪系统功能 ;
- IN: bAdddate 授权时间是否追加生成;
- IN: szRunyears
- IN: szRunmonths
- IN: szRundays
- IN: szRunhours
- IN: szRunminutes
- OUT: lpHasRundate 返回锁已运行时间;
- OUT: lpCouldRundate 返回锁授权时间;
- 返回:
- */
- //////////////////////////////////////////////////////////////////////////
- BOOL CreateEncryptlockInfo(IN CONST INT &nStartPort,IN EncryptlockInfo &linfo,OUT LPTSTR lpHasRundate,IN CONST size_t &sizeOfhasrundate,OUT LPTSTR lpCouldRundate,IN CONST size_t &sizeOfcouldrundate, IN BOOL bfixedId /*= FALSE*/ )
- {
- int nRet = -1;
- DWORD dwShortKey = 0;
- int nVersion = -1;
- CHAR szKeyPath[MAX_PATH] = { 0 };
- if (!FindYtUSB(dwShortKey, nVersion, szKeyPath, nStartPort))
- return FALSE;
- if (dwShortKey == -1)
- {
- // 不是域天智能锁;
- return FALSE;
- }
- nRet = SetReadPassword("FFFFFFFF", "FFFFFFFF", g_pHReadPassWord, g_pLReadPassWord, szKeyPath);
- if (nRet != 0) {
- GetYtUSBKey32ErrInfo(nRet);
- AfxMessageBox(_T("设置读密码失败"));
- }
- nRet = SetWritePassword("FFFFFFFF", "FFFFFFFF", g_pHWritePassWord, g_pLWritePassWord, szKeyPath);
- if (nRet != 0) {
- GetYtUSBKey32ErrInfo(nRet);
- AfxMessageBox(_T("设置写密码失败"));
- }
- // 从地址0~231+32,是所有加密锁共同内容;
- for (int i = 0; i < 8; i++)
- {
- if ((nRet = YtWriteString(g_szRom[i], i * 33, g_pHWritePassWord, g_pLWritePassWord, szKeyPath)) <= 0)
- {
- // 写区域错误;
- GetYtUSBKey32ErrInfo(nRet);
- }
- }
- // 264是座席数量;
- if (linfo.nCCount != 0)
- {
- CHAR szCCount[ENCRYPT_BLOCK_LEN] = { 0 }; // 包含结束符;
- sprintf_s(szCCount, "%d", linfo.nCCount);
- if ((nRet = YtWriteString(szCCount, 264, g_pHWritePassWord, g_pLWritePassWord, szKeyPath)) <= 0 )
- {
- // 设置座席数失败;
- GetYtUSBKey32ErrInfo(nRet);
- return FALSE;
- }
- }
- // 297是域名值;
- // 生成域名串 = 日期 + 短ID;
- CHAR szDomain[ENCRYPT_BLOCK_LEN] = { 0 }; // 包含结束符;
- if ( bfixedId )
- {
- sprintf_s(szDomain, "20151208000000%d.ly.com", dwShortKey);
- }
- else
- {
- CTime tt = CTime::GetCurrentTime();
- sprintf_s(szDomain, "%04d%02d%02d%02d%02d%02d%d.ly.com", tt.GetYear(), tt.GetMonth(), tt.GetDay(), tt.GetHour(), tt.GetMinute(), tt.GetSecond(), dwShortKey);
- }
- if ( ( nRet = YtWriteString(szDomain, 297, g_pHWritePassWord, g_pLWritePassWord, szKeyPath)) <= 0)
- {
- // 生成域名错误;
- GetYtUSBKey32ErrInfo(nRet);
- return FALSE;
- }
- // 330是医院跟踪系统;
- if (linfo.bHospital)
- {
- CHAR szHospital[ENCRYPT_BLOCK_LEN] = { 0 }; // 包含结束符;
- sprintf_s(szHospital, "%d", linfo.bHospital);
- if ( ( nRet = YtWriteString(szHospital, 330, g_pHWritePassWord, g_pLWritePassWord, szKeyPath)) <= 0 )
- {
- // 设置医院跟踪系统失败;
- GetYtUSBKey32ErrInfo(nRet);
- return FALSE;
- }
- }
- // 生成指定软件版本加密解密密钥;
- switch (linfo.nSoftVer)
- {
- case EN_OCHILD:
- nRet = WriteEncKey("FFFFFFFF", "FFFFFFFF", "FFFFFFFF", "FFFFFFFF", g_szEncKey[EN_OCHILD][0], g_szEncKey[EN_OCHILD][1], g_szEncKey[EN_OCHILD][2], g_szEncKey[EN_OCHILD][3], szKeyPath);
- break;
- case EN_LCHILD:
- nRet = WriteEncKey("FFFFFFFF", "FFFFFFFF", "FFFFFFFF", "FFFFFFFF", g_szEncKey[EN_LCHILD][0], g_szEncKey[EN_LCHILD][1], g_szEncKey[EN_LCHILD][2], g_szEncKey[EN_LCHILD][3], szKeyPath);
- break;
- case EN_ECHILD:
- nRet = WriteEncKey("FFFFFFFF", "FFFFFFFF", "FFFFFFFF", "FFFFFFFF", g_szEncKey[EN_ECHILD][0], g_szEncKey[EN_ECHILD][1], g_szEncKey[EN_ECHILD][2], g_szEncKey[EN_ECHILD][3], szKeyPath);
- break;
- case EN_OWDDING:
- nRet = WriteEncKey("FFFFFFFF", "FFFFFFFF", "FFFFFFFF", "FFFFFFFF", g_szEncKey[EN_OWDDING][0], g_szEncKey[EN_OWDDING][1], g_szEncKey[EN_OWDDING][2], g_szEncKey[EN_OWDDING][3], szKeyPath);
- break;
- case EN_LWDDING:
- nRet = WriteEncKey("FFFFFFFF", "FFFFFFFF", "FFFFFFFF", "FFFFFFFF", g_szEncKey[EN_LWDDING][0], g_szEncKey[EN_LWDDING][1], g_szEncKey[EN_LWDDING][2], g_szEncKey[EN_LWDDING][3], szKeyPath);
- break;
- case EN_EWDDING:
- nRet = WriteEncKey("FFFFFFFF", "FFFFFFFF", "FFFFFFFF", "FFFFFFFF", g_szEncKey[EN_EWDDING][0], g_szEncKey[EN_EWDDING][1], g_szEncKey[EN_EWDDING][2], g_szEncKey[EN_EWDDING][3], szKeyPath);
- break;
- }
- if (nRet != 0)
- {
- // 生成密钥失败;
- GetYtUSBKey32ErrInfo(nRet);
- return FALSE;
- }
- //////////////////////////////////////////////////////////////////////////
- // 授权时间码;
- CHAR szyear[10] = { 0 }, szmonth[10] = { 0 }, szday[10] = { 0 }, szhour[10] = { 0 }, szminute[10] = { 0 }, szsecond[10] = { 0 };
- if ( ( nRet = GetRunTimer(szyear, szmonth, szday, szhour, szminute, szsecond, szKeyPath)) != 0 )
- {
- // 获取运行时间失败;
- GetYtUSBKey32ErrInfo(nRet);
- return FALSE;
- }
- _stprintf_s(lpHasRundate, sizeOfhasrundate, _T("已运行 %s年%s月%s天%s时%s分"), szyear, szmonth, szday, szhour, szminute);
- if (linfo.bAdddate) // 追加时间;
- {
- sprintf_s(szyear, "%d", atoi(linfo.szRunyears) + atoi(szyear));
- sprintf_s(szmonth, "%d", atoi(linfo.szRunmonths) + atoi(szmonth));
- sprintf_s(szday, "%d", atoi(linfo.szRundays) + atoi(szday));
- sprintf_s(szhour, "%d", atoi(linfo.szRunhours) + atoi(szday));
- sprintf_s(szminute, "%d", atoi(linfo.szRunminutes) + atoi(szminute));
- }
- else
- {
- sprintf_s(szyear, "%s", linfo.szRunyears);
- sprintf_s(szmonth, "%s", linfo.szRunmonths);
- sprintf_s(szday, "%s", linfo.szRundays);
- sprintf_s(szhour, "%s", linfo.szRunhours);
- sprintf_s(szminute, "%s", linfo.szRunminutes);
- }
- // 生成时间授权码;
- CHAR szOutString[100] = { 0 }; // 返回的时间授权码;
- if (( nRet = MakeTimerAuth(g_szUserKey, dwShortKey, szyear, szmonth, szday, szhour, szminute, szOutString, szKeyPath)) != 0)
- {
- // 生成时间授权码失败;
- GetYtUSBKey32ErrInfo(nRet);
- return FALSE;
- }
- CHAR HKey[9] = "FFFFFFFF", LKey[9] = "FFFFFFFF";
- CHAR WHKey[41] = "0", WLKey[41] = "0";
- memcpy(WHKey, szOutString, 40);
- memcpy(WLKey, &szOutString[40], 40);
- // 写授权时间到加密锁中;
- if ((nRet = WriteTimeAuthToEprom(30128, HKey, LKey, WHKey, WLKey, dwShortKey, szyear, szmonth, szday, szhour, szminute, szKeyPath)) != 0 )
- {
- // 写授权时间失败;
- GetYtUSBKey32ErrInfo(nRet);
- return FALSE;
- }
- DWORD dwID;
- // 30000以后的储存空间为公共区域;
- if ( ( nRet = ReadTimeAuthFromEprom(WHKey, WLKey, szOutString, &dwID, 30128, "FFFFFFFF", "FFFFFFFF", szKeyPath)) == 0 )
- {
- #ifdef UNICODE
- WCHAR *pOutString = ascii2unicode(szOutString);
- _stprintf_s(lpCouldRundate, sizeOfcouldrundate, _T("%s"), pOutString);
- delete pOutString;
- pOutString = NULL;
- #else
- _stprintf_s(lpCouldRundate, sizeOfcouldrundate, _T("%s"), szOutString);
- #endif
- }
- else
- {
- GetYtUSBKey32ErrInfo(nRet);
- }
- return TRUE;
- }
- //////////////////////////////////////////////////////////////////////////
- // 应用接口;
- BOOL GetFirstYtUSBSoftVer(IN INT &nSoftVer, IN CHAR *pBranchIdBuffer, IN size_t sizeOfBranchIdBuffer, IN CONST INT &nUSBStartPos /* = 0 */)
- {
- INT nRetval = 0;
- INT nVal[8] = { 0 };
- DOUBLE fVal[8] = { 0.0 };
- CHAR s0[50] = "", s1[50] = "", s2[50] = "", s3[50] = "", s4[50] = "", s5[50] = "", s6[50] = "", s7[50] = "";
- BOOL bFind = FALSE;
- CHAR szKeyPath[MAX_PATH] = "";
- for (INT nIndex = nUSBStartPos; nIndex < 256; nIndex++)
- {
- memset(szKeyPath, 0, sizeof(szKeyPath));
- nRetval = FindPort(nIndex, szKeyPath);
- if (nRetval != 0 && nIndex == 0) continue;
- if (nRetval != 0) continue;
- for (int i = 0; i < 6; i++)
- {
- // 使用该设备路径锁进行运算;
- nRetval = CalEx(g_byShotVersion[i], 10,
- &nVal[0], &nVal[1], &nVal[2], &nVal[3], &nVal[4], &nVal[5], &nVal[6], &nVal[7],
- &fVal[0], &fVal[1], &fVal[2], &fVal[3], &fVal[4], &fVal[5], &fVal[6], &fVal[7],
- s0, s1, s2, s3, s4, s5, s6, s7, szKeyPath, 20000);
- //如果正确,则返回该设备路径供以后使用;
- if (nRetval == -63) continue;
- if ((nRetval == 0) && (nVal[0] == 123))
- {
- bFind = TRUE;
- nSoftVer = i;
- sprintf_s(pBranchIdBuffer, sizeOfBranchIdBuffer, "%s", s0);
- break;
- }
- }
- if (bFind) break;
- }
- return bFind;
- }
- CONST TCHAR* GetYtUSBKey32ErrInfo(IN const long lError)
- {
- INT nIndex = -1;
- TCHAR *pErrorDescription = NULL;
-
- while ( g_YtError[++nIndex].nErrorCode != -10000 )
- {
- if ( lError == g_YtError[nIndex].nErrorCode )
- {
- pErrorDescription = g_YtError[nIndex].pErrorDescription;
- break;
- }
- }
- if ( pErrorDescription == NULL )
- pErrorDescription = _T("未知错误!\n");
- OutputDebugString(pErrorDescription);
- return pErrorDescription;
- }
- };
|