438 lines
9.8 KiB
C++
438 lines
9.8 KiB
C++
|
/*++
|
||
|
|
||
|
Copyright (C) 1999-2001 Microsoft Corporation
|
||
|
|
||
|
Module Name:
|
||
|
|
||
|
Abstract:
|
||
|
|
||
|
History:
|
||
|
|
||
|
--*/
|
||
|
|
||
|
#include <windows.h>
|
||
|
#include <stdio.h>
|
||
|
|
||
|
DWORD g_aData[] =
|
||
|
{
|
||
|
787298196, 389638077,
|
||
|
341926582, 774741813,
|
||
|
93260522, 163092950,
|
||
|
1990849060, 347345683,
|
||
|
877836976, 1572821297,
|
||
|
648067937, 2085921890,
|
||
|
185524536, 456812682,
|
||
|
0, 757935405,
|
||
|
0, 757935405,
|
||
|
0, 757935405,
|
||
|
0, 757935405,
|
||
|
137293882, 647272253,
|
||
|
926837903, 691288938,
|
||
|
2110722223, 753493867,
|
||
|
1158850856, 231595791,
|
||
|
891966499, 1864871608,
|
||
|
369617977, 1136871300,
|
||
|
1171009120, 869085779,
|
||
|
1450103344, 1086868440,
|
||
|
1961959123, 1059058093,
|
||
|
1935842809, 802291789,
|
||
|
67991817, 981707677,
|
||
|
1259917513, 326492489,
|
||
|
1576246720, 1771986875,
|
||
|
0, 757935405,
|
||
|
0, 757935405,
|
||
|
0, 757935405,
|
||
|
0, 757935405,
|
||
|
923580586, 196610576,
|
||
|
422396857, 1268611680,
|
||
|
612189215, 1446180055,
|
||
|
273627650, 1037431929,
|
||
|
1582243822, 530725520,
|
||
|
802440210, 1390869936,
|
||
|
1406698670, 882125910,
|
||
|
1438991232, 560627627,
|
||
|
519127596, 452431388,
|
||
|
247297193, 1875650637,
|
||
|
1095739709, 1333936659,
|
||
|
488415888, 58615958,
|
||
|
2113012991, 1738890481,
|
||
|
1232434023, 576968899,
|
||
|
408785170, 2004132969,
|
||
|
1072488881, 1949997283,
|
||
|
686278613, 103342821,
|
||
|
1802391228, 1692614641,
|
||
|
1467267833, 20439818,
|
||
|
1881687054, 139215331,
|
||
|
883980780, 1810507476,
|
||
|
328677840, 457133755,
|
||
|
142591755, 1983286802,
|
||
|
1996404059, 1271126329,
|
||
|
1134573462, 762500247,
|
||
|
1814903789, 840278466,
|
||
|
1546035302, 748041854,
|
||
|
1627769996, 1594286475,
|
||
|
485134963, 1356626587,
|
||
|
985018630, 725840743,
|
||
|
894740359, 1781303086,
|
||
|
191459340, 113223348,
|
||
|
1637410797, 99004090,
|
||
|
1314737521, 1672532217,
|
||
|
1668536725, 1304979453,
|
||
|
1000359187, 88572926,
|
||
|
940387879, 86954543,
|
||
|
581549221, 1279191550,
|
||
|
582252523, 1728435494,
|
||
|
1684935272, 658131775,
|
||
|
120729547, 480600746,
|
||
|
1434799119, 1826855997,
|
||
|
132314003, 890416705,
|
||
|
1550628941, 1593392703,
|
||
|
212468432, 1977475751,
|
||
|
145875476, 1283143786,
|
||
|
339648658, 1258446305,
|
||
|
1259855840, 1196087906,
|
||
|
74939557, 525823171,
|
||
|
282953689, 879773678,
|
||
|
702241042, 1008129545,
|
||
|
529353019, 143169584,
|
||
|
0, 543978849,
|
||
|
0, 1701604417,
|
||
|
371789987, 422923611,
|
||
|
1151970391, 221238405,
|
||
|
1680390471, 894991504,
|
||
|
1173777616, 157967432,
|
||
|
1766201693, 1082091029,
|
||
|
961250332, 418310210,
|
||
|
2064488210, 1090270119,
|
||
|
2001088245, 1778413437,
|
||
|
791205667, 120892331,
|
||
|
425237262, 1210731199,
|
||
|
905501056, 1963224902,
|
||
|
1495907077, 1762779656,
|
||
|
1793196122, 900671011,
|
||
|
565554614, 877067351,
|
||
|
1684925417, 1390111021,
|
||
|
1324408981, 1523119716,
|
||
|
1985677317, 1014717431,
|
||
|
2058211074, 325132225,
|
||
|
1158869461, 1242277359,
|
||
|
940757120, 1456714425,
|
||
|
1912286107, 1599660744,
|
||
|
1030658283, 1328068605,
|
||
|
1672026279, 818606002,
|
||
|
1811916152, 731129312,
|
||
|
62148729, 371093903,
|
||
|
300023322, 1713323730,
|
||
|
1016690981, 453549345,
|
||
|
1591860349, 929856991,
|
||
|
1154873655, 1234446286,
|
||
|
1969529918, 889192916,
|
||
|
506902349, 1583269362,
|
||
|
596405421, 29222317,
|
||
|
1957020972, 428224461,
|
||
|
705503535, 1900946280,
|
||
|
1636949272, 753322603,
|
||
|
1574175218, 74107011,
|
||
|
620920752, 2000334733,
|
||
|
286975576, 1272973499,
|
||
|
832394219, 1049983536,
|
||
|
719744492, 863138508,
|
||
|
152013962, 961843672,
|
||
|
92216887, 220011621,
|
||
|
2005324671, 676471875,
|
||
|
801005260, 2107228857,
|
||
|
1417629424, 1535412939,
|
||
|
927485975, 971812307,
|
||
|
440891913, 2031435089,
|
||
|
2075684028, 1235594918,
|
||
|
15075279, 255504492,
|
||
|
1292850514, 1653838496,
|
||
|
1575207405, 771884304,
|
||
|
762297916, 113481758,
|
||
|
1344439445, 1543107246,
|
||
|
852400584, 1804221292,
|
||
|
1525438309, 110908311,
|
||
|
86765426, 771128997,
|
||
|
697445823, 961217353,
|
||
|
21213263, 1351154252,
|
||
|
10599418, 1651444261,
|
||
|
35441527, 1052114448,
|
||
|
1590203695, 1004220318,
|
||
|
526682473, 905611632,
|
||
|
1769355382, 1506382359,
|
||
|
44165446, 222203003,
|
||
|
1796395753, 236997150,
|
||
|
1183262379, 1958681932,
|
||
|
874728503, 1225185820,
|
||
|
570241278, 732193933,
|
||
|
858685714, 2074455587,
|
||
|
1560512242, 570149966,
|
||
|
951907138, 1616617795,
|
||
|
1487056392, 1358244054,
|
||
|
970286561, 92310071,
|
||
|
756933636, 1110268445,
|
||
|
1440979143, 1265100897,
|
||
|
2084942205, 818510862,
|
||
|
1320638918, 823264617,
|
||
|
1971233622, 1847199921,
|
||
|
95431188, 242470127,
|
||
|
856458457, 897727972,
|
||
|
329752498, 468812383,
|
||
|
144227962, 769935106,
|
||
|
144227962, 769935106,
|
||
|
144227962, 769935106,
|
||
|
144227962, 769935106,
|
||
|
534716163, 1761870124,
|
||
|
1020475911, 15843303,
|
||
|
144227962, 769935106,
|
||
|
144227962, 769935106,
|
||
|
144227962, 769935106,
|
||
|
144227962, 769935106,
|
||
|
1067808548, 208610277,
|
||
|
211579674, 1653240566,
|
||
|
239108456, 885154717,
|
||
|
21370838, 1331889325,
|
||
|
981841190, 31603421,
|
||
|
776487910, 155411510,
|
||
|
2071731226, 122456632,
|
||
|
124476971, 416326125,
|
||
|
763251302, 178690314,
|
||
|
1119537894, 126896069,
|
||
|
806112306, 1933102105,
|
||
|
364993844, 1805041121,
|
||
|
1424534966, 727711589,
|
||
|
2077763860, 274369686,
|
||
|
2093089868, 1733803912,
|
||
|
84954222, 1079628647,
|
||
|
264022324, 2037751576,
|
||
|
1024375655, 434843389,
|
||
|
1902071860, 2111102903,
|
||
|
695270825, 1907355848,
|
||
|
1911415748, 1337430371,
|
||
|
971966920, 1236686408,
|
||
|
2033536277, 945241688,
|
||
|
1505165919, 920928449,
|
||
|
1140463463, 867695560,
|
||
|
425854658, 1224833536,
|
||
|
1898028372, 1356457614,
|
||
|
1790370482, 816827286,
|
||
|
451463270, 1522918624,
|
||
|
1281670814, 931443332,
|
||
|
405066436, 2107792490,
|
||
|
261570442, 204422508,
|
||
|
1182010752, 1359667668,
|
||
|
520647196, 199392831,
|
||
|
1232260743, 1016215239,
|
||
|
1066977689, 1846685821,
|
||
|
1393055485, 1149327626,
|
||
|
728869925, 1227807534,
|
||
|
1223562861, 1215769115,
|
||
|
1234782934, 1500675318,
|
||
|
1670384851, 1546713131,
|
||
|
680528633, 517371164,
|
||
|
1190806955, 761856969,
|
||
|
2145532613, 1742670338,
|
||
|
1002949577, 295468350,
|
||
|
538754217, 2099052296,
|
||
|
1487886738, 1318580638,
|
||
|
1540413980, 1248769325,
|
||
|
203789634, 144460909,
|
||
|
1948818884, 1383042119,
|
||
|
1106605766, 249692350,
|
||
|
1654887685, 799220325,
|
||
|
266335729, 1064242885,
|
||
|
935948902, 1729316369,
|
||
|
1904596453, 602576498,
|
||
|
1393926903, 1868790805,
|
||
|
999121367, 1482517664,
|
||
|
1106424117, 1619863692,
|
||
|
475802887, 1065758854,
|
||
|
1578128863, 1073664523,
|
||
|
1902406644, 1490177493,
|
||
|
189884687, 370196266,
|
||
|
2067425084, 1295173952,
|
||
|
719320527, 1966542348,
|
||
|
1402266308, 627647129,
|
||
|
321290752, 563241132,
|
||
|
1055096585, 1304486941,
|
||
|
923108668, 487059104,
|
||
|
344621029, 714650744,
|
||
|
1350621712, 1393479868,
|
||
|
496766707, 337566155,
|
||
|
1398161423, 1065556157,
|
||
|
1637951588, 1664109644,
|
||
|
1897844973, 39233871,
|
||
|
738269405, 2096910723,
|
||
|
92694589, 236509435,
|
||
|
1190806955, 761856969,
|
||
|
338757023, 812768206,
|
||
|
1849559800, 854377249,
|
||
|
1404336425, 1207126318,
|
||
|
1662034928, 342925931,
|
||
|
658926774, 426922867,
|
||
|
1729186771, 1061508106,
|
||
|
563502611, 1697133477,
|
||
|
840094768, 1210950740,
|
||
|
1835414483, 769859538,
|
||
|
747821704, 1438378136,
|
||
|
2126687472, 278562278,
|
||
|
1238007326, 59100431,
|
||
|
1897844973, 39233871,
|
||
|
450014323, 1915307751,
|
||
|
1426814736, 286322278,
|
||
|
846462709, 324087749,
|
||
|
1264181614, 609866356,
|
||
|
537228654, 1155735254,
|
||
|
1669911731, 295201152,
|
||
|
2051750308, 1634959694,
|
||
|
2037895850, 1121635198,
|
||
|
1191562139, 871349233,
|
||
|
384085527, 1485591712,
|
||
|
593489313, 1334053277,
|
||
|
1201558042, 1284197474,
|
||
|
1267301451, 1295178886,
|
||
|
712333739, 1466813771,
|
||
|
1382958161, 55608330,
|
||
|
1404336425, 1207126318,
|
||
|
1420100579, 1516550283,
|
||
|
1034307423, 253077413,
|
||
|
364993844, 1805041121,
|
||
|
2107257906, 1288714714,
|
||
|
2127080717, 1122861179,
|
||
|
496953976, 480397759,
|
||
|
1539886260, 2049877054,
|
||
|
1458240017, 1918020923,
|
||
|
1736195893, 934320622,
|
||
|
270972983, 295012450,
|
||
|
1020551866, 2134232563,
|
||
|
673302697, 1363075082,
|
||
|
329752498, 468812383,
|
||
|
144227962, 769935106,
|
||
|
144227962, 769935106,
|
||
|
144227962, 769935106,
|
||
|
144227962, 769935106,
|
||
|
1764104557, 547082180,
|
||
|
497927576, 24480816,
|
||
|
589828949, 1975205479,
|
||
|
144227962, 769935106,
|
||
|
144227962, 769935106,
|
||
|
144227962, 769935106,
|
||
|
144227962, 769935106,
|
||
|
144227962, 769935106,
|
||
|
602187998, 287638516,
|
||
|
2008233392, 1060225789,
|
||
|
1192430968, 1339353572,
|
||
|
1428531475, 1905392579,
|
||
|
1670384851, 1546713131,
|
||
|
680528633, 517371164,
|
||
|
330641664, 1605658617,
|
||
|
664197573, 1993238793,
|
||
|
329752498, 468812383,
|
||
|
144227962, 769935106,
|
||
|
144227962, 769935106,
|
||
|
144227962, 769935106,
|
||
|
144227962, 769935106,
|
||
|
337739951, 76463872,
|
||
|
1786957427, 416636494,
|
||
|
144227962, 769935106,
|
||
|
144227962, 769935106,
|
||
|
144227962, 769935106,
|
||
|
144227962, 769935106,
|
||
|
144227962, 769935106,
|
||
|
363957482, 713099117,
|
||
|
715207258, 1444991911,
|
||
|
906492934, 201308803,
|
||
|
549588084, 1261979109,
|
||
|
1198999088, 295629922,
|
||
|
1456701468, 2004408543,
|
||
|
1587159928, 1248983505,
|
||
|
144227962, 769935106,
|
||
|
144227962, 769935106,
|
||
|
144227962, 769935106,
|
||
|
144227962, 769935106,
|
||
|
1067808548, 208610277,
|
||
|
156509796, 1042008667,
|
||
|
426198684, 1629282820,
|
||
|
301389858, 1871183307,
|
||
|
593620859, 1798829104,
|
||
|
144227962, 769935106,
|
||
|
144227962, 769935106,
|
||
|
144227962, 769935106,
|
||
|
144227962, 769935106,
|
||
|
1067808548, 208610277,
|
||
|
941907548, 507139560,
|
||
|
1042233049, 945161939,
|
||
|
807955139, 99055478,
|
||
|
999121367, 1482517664,
|
||
|
1308773551, 1409554373,
|
||
|
1523086598, 413771652,
|
||
|
52391019, 1186011222,
|
||
|
563372826, 1525327567,
|
||
|
2102151822, 1136009315,
|
||
|
1574765603, 1457921496,
|
||
|
867496441, 1693047572,
|
||
|
407929249, 542656253,
|
||
|
1795844148, 255267812,
|
||
|
1218529061, 1059803448,
|
||
|
39529162, 1398686543,
|
||
|
490430000, 1686718086,
|
||
|
489233830, 1863308304
|
||
|
};
|
||
|
|
||
|
#define NUM_DATA (sizeof(g_aData)/sizeof(DWORD))
|
||
|
#define LARGE_PRIME 2147483659
|
||
|
|
||
|
DWORD HashKey(char* szKey)
|
||
|
{
|
||
|
DWORD n = 1;
|
||
|
while(*szKey)
|
||
|
{
|
||
|
n = n * (2*(DWORD)*szKey + 1);
|
||
|
szKey++;
|
||
|
}
|
||
|
return n % LARGE_PRIME;
|
||
|
}
|
||
|
|
||
|
LPSTR GetText(LPSTR szKey)
|
||
|
{
|
||
|
LPSTR szResult = new char[NUM_DATA*2+4];
|
||
|
DWORD* pdwResult = (DWORD*)szResult;
|
||
|
|
||
|
DWORD dwKey = HashKey(szKey);
|
||
|
for(int i = 0; i < NUM_DATA; i+=2)
|
||
|
{
|
||
|
__int64 i64A = g_aData[i];
|
||
|
__int64 i64B = g_aData[i+1];
|
||
|
__int64 i64Res = (i64A*dwKey + i64B) % LARGE_PRIME;
|
||
|
*pdwResult = (DWORD)i64Res;
|
||
|
pdwResult++;
|
||
|
}
|
||
|
*pdwResult = 0;
|
||
|
|
||
|
return szResult;
|
||
|
}
|
||
|
|
||
|
BOOL CheckText(char* szText)
|
||
|
{
|
||
|
while(*szText)
|
||
|
{
|
||
|
if (*szText < 8 || *szText > 127)
|
||
|
return FALSE;
|
||
|
szText++;
|
||
|
}
|
||
|
return TRUE;
|
||
|
}
|
||
|
|
||
|
|
||
|
void main()
|
||
|
{
|
||
|
printf("Key: ");
|
||
|
char szKey[100];
|
||
|
scanf("%s", szKey);
|
||
|
LPSTR szResult = GetText(szKey);
|
||
|
if(!CheckText(szResult))
|
||
|
printf("INVALID!\n");
|
||
|
else
|
||
|
printf("%s\n", szResult);
|
||
|
}
|