📄 rijndael.cpp
字号:
//--FILE DEFINITION-----------------------------------------------------------
//
/*! \file
File name: Rijndael.cpp
Author: Yves Lessard
Date: 2000/04/27(YYYY/MM/DD)
Library: Win32.
Version: 1.00
Usage: Rijndael (pronounced rain-dahl) is the block cipher algorithm
that has been selected by the U.S
Notes: See header for infos.
*/
//----------------------------------------------------------------------------
#include "Rijndael.h"
const int Rijndael::sm_alog[256] =
{
1, 3, 5, 15, 17, 51, 85, 255, 26, 46, 114, 150, 161, 248, 19, 53,
95, 225, 56, 72, 216, 115, 149, 164, 247, 2, 6, 10, 30, 34, 102, 170,
229, 52, 92, 228, 55, 89, 235, 38, 106, 190, 217, 112, 144, 171, 230, 49,
83, 245, 4, 12, 20, 60, 68, 204, 79, 209, 104, 184, 211, 110, 178, 205,
76, 212, 103, 169, 224, 59, 77, 215, 98, 166, 241, 8, 24, 40, 120, 136,
131, 158, 185, 208, 107, 189, 220, 127, 129, 152, 179, 206, 73, 219, 118, 154,
181, 196, 87, 249, 16, 48, 80, 240, 11, 29, 39, 105, 187, 214, 97, 163,
254, 25, 43, 125, 135, 146, 173, 236, 47, 113, 147, 174, 233, 32, 96, 160,
251, 22, 58, 78, 210, 109, 183, 194, 93, 231, 50, 86, 250, 21, 63, 65,
195, 94, 226, 61, 71, 201, 64, 192, 91, 237, 44, 116, 156, 191, 218, 117,
159, 186, 213, 100, 172, 239, 42, 126, 130, 157, 188, 223, 122, 142, 137, 128,
155, 182, 193, 88, 232, 35, 101, 175, 234, 37, 111, 177, 200, 67, 197, 84,
252, 31, 33, 99, 165, 244, 7, 9, 27, 45, 119, 153, 176, 203, 70, 202,
69, 207, 74, 222, 121, 139, 134, 145, 168, 227, 62, 66, 198, 81, 243, 14,
18, 54, 90, 238, 41, 123, 141, 140, 143, 138, 133, 148, 167, 242, 13, 23,
57, 75, 221, 124, 132, 151, 162, 253, 28, 36, 108, 180, 199, 82, 246, 1
};
const int Rijndael::sm_log[256] =
{
0, 0, 25, 1, 50, 2, 26, 198, 75, 199, 27, 104, 51, 238, 223, 3,
100, 4, 224, 14, 52, 141, 129, 239, 76, 113, 8, 200, 248, 105, 28, 193,
125, 194, 29, 181, 249, 185, 39, 106, 77, 228, 166, 114, 154, 201, 9, 120,
101, 47, 138, 5, 33, 15, 225, 36, 18, 240, 130, 69, 53, 147, 218, 142,
150, 143, 219, 189, 54, 208, 206, 148, 19, 92, 210, 241, 64, 70, 131, 56,
102, 221, 253, 48, 191, 6, 139, 98, 179, 37, 226, 152, 34, 136, 145, 16,
126, 110, 72, 195, 163, 182, 30, 66, 58, 107, 40, 84, 250, 133, 61, 186,
43, 121, 10, 21, 155, 159, 94, 202, 78, 212, 172, 229, 243, 115, 167, 87,
175, 88, 168, 80, 244, 234, 214, 116, 79, 174, 233, 213, 231, 230, 173, 232,
44, 215, 117, 122, 235, 22, 11, 245, 89, 203, 95, 176, 156, 169, 81, 160,
127, 12, 246, 111, 23, 196, 73, 236, 216, 67, 31, 45, 164, 118, 123, 183,
204, 187, 62, 90, 251, 96, 177, 134, 59, 82, 161, 108, 170, 85, 41, 157,
151, 178, 135, 144, 97, 190, 220, 252, 188, 149, 207, 205, 55, 63, 91, 209,
83, 57, 132, 60, 65, 162, 109, 71, 20, 42, 158, 93, 86, 242, 211, 171,
68, 17, 146, 217, 35, 32, 46, 137, 180, 124, 184, 38, 119, 153, 227, 165,
103, 74, 237, 222, 197, 49, 254, 24, 13, 99, 140, 128, 192, 247, 112, 7
};
const TCHAR Rijndael::sm_S[256] =
{
99, 124, 119, 123, -14, 107, 111, -59, 48, 1, 103, 43, -2, -41, -85, 118,
-54, -126, -55, 125, -6, 89, 71, -16, -83, -44, -94, -81, -100, -92, 114, -64,
-73, -3, -109, 38, 54, 63, -9, -52, 52, -91, -27, -15, 113, -40, 49, 21,
4, -57, 35, -61, 24, -106, 5, -102, 7, 18, -128, -30, -21, 39, -78, 117,
9, -125, 44, 26, 27, 110, 90, -96, 82, 59, -42, -77, 41, -29, 47, -124,
83, -47, 0, -19, 32, -4, -79, 91, 106, -53, -66, 57, 74, 76, 88, -49,
-48, -17, -86, -5, 67, 77, 51, -123, 69, -7, 2, 127, 80, 60, -97, -88,
81, -93, 64, -113, -110, -99, 56, -11, -68, -74, -38, 33, 16, -1, -13, -46,
-51, 12, 19, -20, 95, -105, 68, 23, -60, -89, 126, 61, 100, 93, 25, 115,
96, -127, 79, -36, 34, 42, -112, -120, 70, -18, -72, 20, -34, 94, 11, -37,
-32, 50, 58, 10, 73, 6, 36, 92, -62, -45, -84, 98, -111, -107, -28, 121,
-25, -56, 55, 109, -115, -43, 78, -87, 108, 86, -12, -22, 101, 122, -82, 8,
-70, 120, 37, 46, 28, -90, -76, -58, -24, -35, 116, 31, 75, -67, -117, -118,
112, 62, -75, 102, 72, 3, -10, 14, 97, 53, 87, -71, -122, -63, 29, -98,
-31, -8, -104, 17, 105, -39, -114, -108, -101, 30, -121, -23, -50, 85, 40, -33,
-116, -95, -119, 13, -65, -26, 66, 104, 65, -103, 45, 15, -80, 84, -69, 22
};
const TCHAR Rijndael::sm_Si[256] =
{
82, 9, 106, -43, 48, 54, -91, 56, -65, 64, -93, -98, -127, -13, -41, -5,
124, -29, 57, -126, -101, 47, -1, -121, 52, -114, 67, 68, -60, -34, -23, -53,
84, 123, -108, 50, -90, -62, 35, 61, -18, 76, -107, 11, 66, -6, -61, 78,
8, 46, -95, 102, 40, -39, 36, -78, 118, 91, -94, 73, 109, -117, -47, 37,
114, -8, -10, 100, -122, 104, -104, 22, -44, -92, 92, -52, 93, 101, -74, -110,
108, 112, 72, 80, -3, -19, -71, -38, 94, 21, 70, 87, -89, -115, -99, -124,
-112, -40, -85, 0, -116, -68, -45, 10, -9, -28, 88, 5, -72, -77, 69, 6,
-48, 44, 30, -113, -54, 63, 15, 2, -63, -81, -67, 3, 1, 19, -118, 107,
58, -111, 17, 65, 79, 103, -36, -22, -105, -14, -49, -50, -16, -76, -26, 115,
-106, -84, 116, 34, -25, -83, 53, -123, -30, -7, 55, -24, 28, 117, -33, 110,
71, -15, 26, 113, 29, 41, -59, -119, 111, -73, 98, 14, -86, 24, -66, 27,
-4, 86, 62, 75, -58, -46, 121, 32, -102, -37, -64, -2, 120, -51, 90, -12,
31, -35, -88, 51, -120, 7, -57, 49, -79, 18, 16, 89, 39, -128, -20, 95,
96, 81, 127, -87, 25, -75, 74, 13, 45, -27, 122, -97, -109, -55, -100, -17,
-96, -32, 59, 77, -82, 42, -11, -80, -56, -21, -69, 60, -125, 83, -103, 97,
23, 43, 4, 126, -70, 119, -42, 38, -31, 105, 20, 99, 85, 33, 12, 125
};
const int Rijndael::sm_T1[256] =
{
-966564955, -126059388, -294160487, -159679603,
-855539, -697603139, -563122255, -1849309868,
1613770832, 33620227, -832084055, 1445669757,
-402719207, -1244145822, 1303096294, -327780710,
-1882535355, 528646813, -1983264448, -92439161,
-268764651, -1302767125, -1907931191, -68095989,
1101901292, -1277897625, 1604494077, 1169141738,
597466303, 1403299063, -462261610, -1681866661,
1974974402, -503448292, 1033081774, 1277568618,
1815492186, 2118074177, -168298750, -2083730353,
1748251740, 1369810420, -773462732, -101584632,
-495881837, -1411852173, 1647391059, 706024767,
134480908, -1782069422, 1176707941, -1648114850,
806885416, 932615841, 168101135, 798661301,
235341577, 605164086, 461406363, -538779075,
-840176858, 1311188841, 2142417613, -361400929,
302582043, 495158174, 1479289972, 874125870,
907746093, -596742478, -1269146898, 1537253627,
-1538108682, 1983593293, -1210657183, 2108928974,
1378429307, -572267714, 1580150641, 327451799,
-1504488459, -1177431704, 0, -1041371860,
1075847264, -469959649, 2041688520, -1235526675,
-731223362, -1916023994, 1740553945, 1916352843,
-1807070498, -1739830060, -1336387352, -2049978550,
-1143943061, -974131414, 1336584933, -302253290,
-2042412091, -1706209833, 1714631509, 293963156,
-1975171633, -369493744, 67240454, -25198719,
-1605349136, 2017213508, 631218106, 1269344483,
-1571728909, 1571005438, -2143272768, 93294474,
1066570413, 563977660, 1882732616, -235539196,
1673313503, 2008463041, -1344611723, 1109467491,
537923632, -436207846, -34344178, -1076702611,
-2117218996, 403442708, 638784309, -1007883217,
-1101045791, 899127202, -2008791860, 773265209,
-1815821225, 1437050866, -58818942, 2050833735,
-932944724, -1168286233, 840505643, -428641387,
-1067425632, 427917720, -1638969391, -1545806721,
1143087718, 1412049534, 999329963, 193497219,
-1941551414, -940642775, 1807268051, 672404540,
-1478566279, -1134666014, 369822493, -1378100362,
-606019525, 1681011286, 1949973070, 336202270,
-1840690725, 201721354, 1210328172, -1201906460,
-1614626211, -1110191250, 1135389935, -1000185178,
965841320, 831886756, -739974089, -226920053,
-706222286, -1949775805, 1849112409, -630362697,
26054028, -1311386268, -1672589614, 1235855840,
-663982924, -1403627782, -202050553, -806688219,
-899324497, -193299826, 1202630377, 268961816,
1874508501, -260540280, 1243948399, 1546530418,
941366308, 1470539505, 1941222599, -1748580783,
-873928669, -1579295364, -395021156, 1042226977,
-1773450275, 1639824860, 227249030, 260737669,
-529502064, 2084453954, 1907733956, -865704278,
-1874310952, 100860677, -134810111, 470683154,
-1033805405, 1781871967, -1370007559, 1773779408,
394692241, -1715355304, 974986535, 664706745,
-639508168, -336005101, 731420851, 571543859,
-764843589, -1445340816, 126783113, 865375399,
765172662, 1008606754, 361203602, -907417312,
-2016489911, -1437248001, 1344809080, -1512054918,
59542671, 1503764984, 160008576, 437062935,
1707065306, -672733647, -2076032314, -798463816,
-2109652541, 697932208, 1512910199, 504303377,
2075177163, -1470868228, 1841019862, 739644986
};
const int Rijndael::sm_T2[256] =
{
-1513725085, -2064089988, -1712425097, -1913226373,
234877682, -1110021269, -1310822545, 1418839493,
1348481072, 50462977, -1446090905, 2102799147,
434634494, 1656084439, -431117397, -1695779210,
1167051466, -1658879358, 1082771913, -2013627011,
368048890, -340633255, -913422521, 201060592,
-331240019, 1739838676, -44064094, -364531793,
-1088185188, -145513308, -1763413390, 1536934080,
-1032472649, 484572669, -1371696237, 1783375398,
1517041206, 1098792767, 49674231, 1334037708,
1550332980, -195975771, 886171109, 150598129,
-1813876367, 1940642008, 1398944049, 1059722517,
201851908, 1385547719, 1699095331, 1587397571,
674240536, -1590192490, 252314885, -1255171430,
151914247, 908333586, -1692696448, 1038082786,
651029483, 1766729511, -847269198, -1612024459,
454166793, -1642232957, 1951935532, 775166490,
758520603, -1294176658, -290170278, -77881184,
-157003182, 1299594043, 1639438038, -830622797,
2068982057, 1054729187, 1901997871, -1760328572,
-173649069, 1757008337, 0, 750906861,
1614815264, 535035132, -931548751, -306816165,
-1093375382, 1183697867, -647512386, 1265776953,
-560706998, -728216500, -391096232, 1250283471,
1807470800, 717615087, -447763798, 384695291,
-981056701, -677753523, 1432761139, -1810791035,
-813021883, 283769337, 100925954, -2114027649,
-257929136, 1148730428, -1171939425, -481580888,
-207466159, -27417693, -1065336768, -1979347057,
-1388342638, -1138647651, 1215313976, 82966005,
-547111748, -1049119050, 1974459098, 1665278241,
807407632, 451280895, 251524083, 1841287890,
1283575245, 337120268, 891687699, 801369324,
-507617441, -1573546089, -863484860, 959321879,
1469301956, -229267545, -2097381762, 1199193405,
-1396153244, -407216803, 724703513, -1780059277,
-1598005152, -1743158911, -778154161, 2141445340,
1715741218, 2119445034, -1422159728, -2096396152,
-896776634, 700968686, -747915080, 1009259540,
2041044702, -490971554, 487983883, 1991105499,
1004265696, 1449407026, 1316239930, 504629770,
-611169975, 168560134, 1816667172, -457679780,
1570751170, 1857934291, -280777556, -1497079198,
-1472622191, -1540254315, 936633572, -1947043463,
852879335, 1133234376, 1500395319, -1210421907,
-1946055283, 1689376213, -761508274, -532043351,
-1260884884, -89369002, 133428468, 634383082,
-1345690267, -1896580486, -381178194, 403703816,
-714097990, -1997506440, 1867130149, 1918643758,
607656988, -245913946, -948718412, 1368901318,
600565992, 2090982877, -1662487436, 557719327,
-577352885, -597574211, -2045932661, -2062579062,
-1864339344, 1115438654, -999180875, -1429445018,
-661632952, 84280067, 33027830, 303828494,
-1547542175, 1600795957, -106014889, -798377543,
-1860729210, 1486471617, 658119965, -1188585826,
953803233, 334231800, -1288988520, 857870609,
-1143838359, 1890179545, -1995993458, -1489791852,
-1238525029, 574365214, -1844082809, 550103529,
1233637070, -5614251, 2018519080, 2057691103,
-1895592820, -128343647, -2146858615, 387583245,
-630865985, 836232934, -964410814, -1194301336,
-1014873791, -1339450983, 2002398509, 287182607,
-881086288, -56077228, -697451589, 975967766
};
const int Rijndael::sm_T3[256] =
{
1671808611, 2089089148, 2006576759, 2072901243,
-233963534, 1807603307, 1873927791, -984313403,
810573872, 16974337, 1739181671, 729634347,
-31856642, -681396777, -1410970197, 1989864566,
-901410870, -2103631998, -918517303, 2106063485,
-99225606, 1508618841, 1204391495, -267650064,
-1377025619, -731401260, -1560453214, -1343601233,
-1665195108, -1527295068, 1922491506, -1067738176,
-1211992649, -48438787, -1817297517, 644500518,
911895606, 1061256767, -150800905, -867204148,
878471220, -1510714971, -449523227, -251069967,
1905517169, -663508008, 827548209, 356461077,
67897348, -950889017, 593839651, -1017209405,
405286936, -1767819370, 84871685, -1699401830,
118033927, 305538066, -2137318528, -499261470,
-349778453, 661212711, -1295155278, 1973414517,
152769033, -2086789757, 745822252, 439235610,
455947803, 1857215598, 1525593178, -1594139744,
1391895634, 994932283, -698239018, -1278313037,
695947817, -482419229, 795958831, -2070473852,
1408607827, -781665839, 0, -315833875,
543178784, -65018884, -1312261711, 1542305371,
1790891114, -884568629, -1093048386, 961245753,
1256100938, 1289001036, 1491644504, -817199665,
-798245936, -282409489, -1427812438, -82383365,
1137018435, 1305975373, 861234739, -2053893755,
1171229253, -116332039, 33948674, 2139225727,
1357946960, 1011120188, -1615190625, -1461498968,
1374921297, -1543610973, 1086357568, -1886780017,
-1834139758, -1648615011, 944271416, -184225291,
-1126210628, -1228834890, -629821478, 560153121,
271589392, -15014401, -217121293, -764559406,
-850624051, 202643468, 322250259, -332413972,
1608629855, -1750977129, 1154254916, 389623319,
-1000893500, -1477290585, 2122513534, 1028094525,
1689045092, 1575467613, 422261273, 1939203699,
1621147744, -2120738431, 1339137615, -595614756,
577127458, 712922154, -1867826288, -2004677752,
1187679302, -299251730, -1194103880, 339486740,
-562452514, 1591917662, 186455563, -612979237,
-532948000, 844522546, 978220090, 169743370,
1239126601, 101321734, 611076132, 1558493276,
-1034051646, -747717165, -1393605716, 1655096418,
-1851246191, -1784401515, -466103324, 2039214713,
-416098841, -935097400, 928607799, 1840765549,
-1920204403, -714821163, 1322425422, -1444918871,
1823791212, 1459268694, -200805388, -366620694,
1706019429, 2056189050, -1360443474, 135794696,
-1160417350, 2022240376, 628050469, 779246638,
472135708, -1494132826, -1261997132, -967731258,
-400307224, -579034659, 1956440180, 522272287,
1272813131, -1109630531, -1954148981, -1970991222,
1888542832, 1044544574, -1245417035, 1722469478,
1222152264, 50660867, -167643146, 236067854,
1638122081, 895445557, 1475980887, -1177523783,
-2037311610, -1051158079, 489110045, -1632032866,
-516367903, -132912136, -1733088360, 288563729,
1773916777, -646927911, -1903622258, -1800981612,
-1682559589, 505560094, -2020469369, -383727127,
-834041906, 1442818645, 678973480, -545610273,
-1936784500, -1577559647, -1988097655, 219617805,
-1076206145, -432941082, 1120306242, 1756942440,
1103331905, -1716508263, 762796589, 252780047,
-1328841808, 1425844308, -1143575109, 372911126
};
const int Rijndael::sm_T4[256] =
{
1667474886, 2088535288, 2004326894, 2071694838,
-219017729, 1802223062, 1869591006, -976923503,
808472672, 16843522, 1734846926, 724270422,
-16901657, -673750347, -1414797747, 1987484396,
-892713585, -2105369313, -909557623, 2105378810,
-84273681, 1499065266, 1195886990, -252703749,
-1381110719, -724277325, -1566376609, -1347425723,
-1667449053, -1532692653, 1920112356, -1061135461,
-1212693899, -33743647, -1819038147, 640051788,
909531756, 1061110142, -134806795, -859025533,
875846760, -1515850671, -437963567, -235861767,
1903268834, -656903253, 825316194, 353713962,
67374088, -943238507, 589522246, -1010606435,
404236336, -1768513225, 84217610, -1701137105,
117901582, 303183396, -2139055333, -488489505,
-336910643, 656894286, -1296904833, 1970642922,
151591698, -2088526307, 741110872, 437923380,
454765878, 1852748508, 1515908788, -1600062629,
1381168804, 993742198, -690593353, -1280061827,
690584402, -471646499, 791638366, -2071685357,
1398011302, -774805319, 0, -303223615,
538992704, -50585629, -1313748871, 1532751286,
1785380564, -875870579, -1094788761, 960056178,
1246420628, 1280103576, 1482221744, -808498555,
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -