/*++ Copyright (C) 1999-2001 Microsoft Corporation Module Name: Abstract: History: --*/ #include #include 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); }