📄 rijndael.pas
字号:
$8db59154, $5d0571c4, $d46f0406, $15ff6050, $fb241998, $e997d6bd, $43cc8940, $9e7767d9, $42bdb0e8, $8b880789, $5b38e719, $eedb79c8, $0a47a17c, $0fe97c42, $1ec9f884, $00000000, $86830980, $ed48322b, $70ac1e11, $724e6c5a, $fffbfd0e, $38560f85, $d51e3dae, $3927362d, $d9640a0f, $a621685c, $54d19b5b, $2e3a2436, $67b10c0a, $e70f9357, $96d2b4ee, $919e1b9b, $c54f80c0, $20a261dc, $4b695a77, $1a161c12, $ba0ae293, $2ae5c0a0, $e0433c22, $171d121b, $0d0b0e09, $c7adf28b, $a8b92db6, $a9c8141e, $198557f1, $074caf75, $ddbbee99, $60fda37f, $269ff701, $f5bc5c72, $3bc54466, $7e345bfb, $29768b43, $c6dccb23, $fc68b6ed, $f163b8e4, $dccad731, $85104263, $22401397, $112084c6, $247d854a, $3df8d2bb, $3211aef9, $a16dc729, $2f4b1d9e, $30f3dcb2, $52ec0d86, $e3d077c1, $166c2bb3, $b999a970, $48fa1194, $642247e9, $8cc4a8fc, $3f1aa0f0, $2cd8567d, $90ef2233, $4ec78749, $d1c1d938, $a2fe8cca, $0b3698d4, $81cfa6f5, $de28a57a, $8e26dab7, $bfa43fad, $9de42c3a, $920d5078, $cc9b6a5f, $4662547e, $13c2f68d, $b8e890d8, $f75e2e39, $aff582c3, $80be9f5d, $937c69d0, $2da96fd5, $12b3cf25, $993bc8ac, $7da71018, $636ee89c, $bb7bdb3b, $7809cd26, $18f46e59, $b701ec9a, $9aa8834f, $6e65e695, $e67eaaff, $cf0821bc, $e8e6ef15, $9bd9bae7, $36ce4a6f, $09d4ea9f, $7cd629b0, $b2af31a4, $23312a3f, $9430c6a5, $66c035a2, $bc37744e, $caa6fc82, $d0b0e090, $d81533a7, $984af104, $daf741ec, $500e7fcd, $f62f1791, $d68d764d, $b04d43ef, $4d54ccaa, $04dfe496, $b5e39ed1, $881b4c6a, $1fb8c12c, $517f4665, $ea049d5e, $355d018c, $7473fa87, $412efb0b, $1d5ab367, $d25292db, $5633e910, $47136dd6, $618c9ad7, $0c7a37a1, $148e59f8, $3c89eb13, $27eecea9, $c935b761, $e5ede11c, $b13c7a47, $df599cd2, $733f55f2, $ce791814, $37bf73c7, $cdea53f7, $aa5b5ffd, $6f14df3d, $db867844, $f381caaf, $c43eb968, $342c3824, $405fc2a3, $c372161d, $250cbce2, $498b283c, $9541ff0d, $017139a8, $b3de080c, $e49cd8b4, $c1906456, $84617bcb, $b670d532, $5c74486c, $5742d0b8);const Td3: ARRAY [0..255] OF SET32 = ( $f4a75051, $4165537e, $17a4c31a, $275e963a, $ab6bcb3b, $9d45f11f, $fa58abac, $e303934b, $30fa5520, $766df6ad, $cc769188, $024c25f5, $e5d7fc4f, $2acbd7c5, $35448026, $62a38fb5, $b15a49de, $ba1b6725, $ea0e9845, $fec0e15d, $2f7502c3, $4cf01281, $4697a38d, $d3f9c66b, $8f5fe703, $929c9515, $6d7aebbf, $5259da95, $be832dd4, $7421d358, $e0692949, $c9c8448e, $c2896a75, $8e7978f4, $583e6b99, $b971dd27, $e14fb6be, $88ad17f0, $20ac66c9, $ce3ab47d, $df4a1863, $1a3182e5, $51336097, $537f4562, $6477e0b1, $6bae84bb, $81a01cfe, $082b94f9, $48685870, $45fd198f, $de6c8794, $7bf8b752, $73d323ab, $4b02e272, $1f8f57e3, $55ab2a66, $eb2807b2, $b5c2032f, $c57b9a86, $3708a5d3, $2887f230, $bfa5b223, $036aba02, $16825ced, $cf1c2b8a, $79b492a7, $07f2f0f3, $69e2a14e, $daf4cd65, $05bed506, $34621fd1, $a6fe8ac4, $2e539d34, $f355a0a2, $8ae13205, $f6eb75a4, $83ec390b, $60efaa40, $719f065e, $6e1051bd, $218af93e, $dd063d96, $3e05aedd, $e6bd464d, $548db591, $c45d0571, $06d46f04, $5015ff60, $98fb2419, $bde997d6, $4043cc89, $d99e7767, $e842bdb0, $898b8807, $195b38e7, $c8eedb79, $7c0a47a1, $420fe97c, $841ec9f8, $00000000, $80868309, $2bed4832, $1170ac1e, $5a724e6c, $0efffbfd, $8538560f, $aed51e3d, $2d392736, $0fd9640a, $5ca62168, $5b54d19b, $362e3a24, $0a67b10c, $57e70f93, $ee96d2b4, $9b919e1b, $c0c54f80, $dc20a261, $774b695a, $121a161c, $93ba0ae2, $a02ae5c0, $22e0433c, $1b171d12, $090d0b0e, $8bc7adf2, $b6a8b92d, $1ea9c814, $f1198557, $75074caf, $99ddbbee, $7f60fda3, $01269ff7, $72f5bc5c, $663bc544, $fb7e345b, $4329768b, $23c6dccb, $edfc68b6, $e4f163b8, $31dccad7, $63851042, $97224013, $c6112084, $4a247d85, $bb3df8d2, $f93211ae, $29a16dc7, $9e2f4b1d, $b230f3dc, $8652ec0d, $c1e3d077, $b3166c2b, $70b999a9, $9448fa11, $e9642247, $fc8cc4a8, $f03f1aa0, $7d2cd856, $3390ef22, $494ec787, $38d1c1d9, $caa2fe8c, $d40b3698, $f581cfa6, $7ade28a5, $b78e26da, $adbfa43f, $3a9de42c, $78920d50, $5fcc9b6a, $7e466254, $8d13c2f6, $d8b8e890, $39f75e2e, $c3aff582, $5d80be9f, $d0937c69, $d52da96f, $2512b3cf, $ac993bc8, $187da710, $9c636ee8, $3bbb7bdb, $267809cd, $5918f46e, $9ab701ec, $4f9aa883, $956e65e6, $ffe67eaa, $bccf0821, $15e8e6ef, $e79bd9ba, $6f36ce4a, $9f09d4ea, $b07cd629, $a4b2af31, $3f23312a, $a59430c6, $a266c035, $4ebc3774, $82caa6fc, $90d0b0e0, $a7d81533, $04984af1, $ecdaf741, $cd500e7f, $91f62f17, $4dd68d76, $efb04d43, $aa4d54cc, $9604dfe4, $d1b5e39e, $6a881b4c, $2c1fb8c1, $65517f46, $5eea049d, $8c355d01, $877473fa, $0b412efb, $671d5ab3, $dbd25292, $105633e9, $d647136d, $d7618c9a, $a10c7a37, $f8148e59, $133c89eb, $a927eece, $61c935b7, $1ce5ede1, $47b13c7a, $d2df599c, $f2733f55, $14ce7918, $c737bf73, $f7cdea53, $fdaa5b5f, $3d6f14df, $44db8678, $aff381ca, $68c43eb9, $24342c38, $a3405fc2, $1dc37216, $e2250cbc, $3c498b28, $0d9541ff, $a8017139, $0cb3de08, $b4e49cd8, $56c19064, $cb84617b, $32b670d5, $6c5c7448, $b85742d0);const Td4: ARRAY [0..255] OF SET32 = ( $52525252, $09090909, $6a6a6a6a, $d5d5d5d5, $30303030, $36363636, $a5a5a5a5, $38383838, $bfbfbfbf, $40404040, $a3a3a3a3, $9e9e9e9e, $81818181, $f3f3f3f3, $d7d7d7d7, $fbfbfbfb, $7c7c7c7c, $e3e3e3e3, $39393939, $82828282, $9b9b9b9b, $2f2f2f2f, $ffffffff, $87878787, $34343434, $8e8e8e8e, $43434343, $44444444, $c4c4c4c4, $dededede, $e9e9e9e9, $cbcbcbcb, $54545454, $7b7b7b7b, $94949494, $32323232, $a6a6a6a6, $c2c2c2c2, $23232323, $3d3d3d3d, $eeeeeeee, $4c4c4c4c, $95959595, $0b0b0b0b, $42424242, $fafafafa, $c3c3c3c3, $4e4e4e4e, $08080808, $2e2e2e2e, $a1a1a1a1, $66666666, $28282828, $d9d9d9d9, $24242424, $b2b2b2b2, $76767676, $5b5b5b5b, $a2a2a2a2, $49494949, $6d6d6d6d, $8b8b8b8b, $d1d1d1d1, $25252525, $72727272, $f8f8f8f8, $f6f6f6f6, $64646464, $86868686, $68686868, $98989898, $16161616, $d4d4d4d4, $a4a4a4a4, $5c5c5c5c, $cccccccc, $5d5d5d5d, $65656565, $b6b6b6b6, $92929292, $6c6c6c6c, $70707070, $48484848, $50505050, $fdfdfdfd, $edededed, $b9b9b9b9, $dadadada, $5e5e5e5e, $15151515, $46464646, $57575757, $a7a7a7a7, $8d8d8d8d, $9d9d9d9d, $84848484, $90909090, $d8d8d8d8, $abababab, $00000000, $8c8c8c8c, $bcbcbcbc, $d3d3d3d3, $0a0a0a0a, $f7f7f7f7, $e4e4e4e4, $58585858, $05050505, $b8b8b8b8, $b3b3b3b3, $45454545, $06060606, $d0d0d0d0, $2c2c2c2c, $1e1e1e1e, $8f8f8f8f, $cacacaca, $3f3f3f3f, $0f0f0f0f, $02020202, $c1c1c1c1, $afafafaf, $bdbdbdbd, $03030303, $01010101, $13131313, $8a8a8a8a, $6b6b6b6b, $3a3a3a3a, $91919191, $11111111, $41414141, $4f4f4f4f, $67676767, $dcdcdcdc, $eaeaeaea, $97979797, $f2f2f2f2, $cfcfcfcf, $cececece, $f0f0f0f0, $b4b4b4b4, $e6e6e6e6, $73737373, $96969696, $acacacac, $74747474, $22222222, $e7e7e7e7, $adadadad, $35353535, $85858585, $e2e2e2e2, $f9f9f9f9, $37373737, $e8e8e8e8, $1c1c1c1c, $75757575, $dfdfdfdf, $6e6e6e6e, $47474747, $f1f1f1f1, $1a1a1a1a, $71717171, $1d1d1d1d, $29292929, $c5c5c5c5, $89898989, $6f6f6f6f, $b7b7b7b7, $62626262, $0e0e0e0e, $aaaaaaaa, $18181818, $bebebebe, $1b1b1b1b, $fcfcfcfc, $56565656, $3e3e3e3e, $4b4b4b4b, $c6c6c6c6, $d2d2d2d2, $79797979, $20202020, $9a9a9a9a, $dbdbdbdb, $c0c0c0c0, $fefefefe, $78787878, $cdcdcdcd, $5a5a5a5a, $f4f4f4f4, $1f1f1f1f, $dddddddd, $a8a8a8a8, $33333333, $88888888, $07070707, $c7c7c7c7, $31313131, $b1b1b1b1, $12121212, $10101010, $59595959, $27272727, $80808080, $ecececec, $5f5f5f5f, $60606060, $51515151, $7f7f7f7f, $a9a9a9a9, $19191919, $b5b5b5b5, $4a4a4a4a, $0d0d0d0d, $2d2d2d2d, $e5e5e5e5, $7a7a7a7a, $9f9f9f9f, $93939393, $c9c9c9c9, $9c9c9c9c, $efefefef, $a0a0a0a0, $e0e0e0e0, $3b3b3b3b, $4d4d4d4d, $aeaeaeae, $2a2a2a2a, $f5f5f5f5, $b0b0b0b0, $c8c8c8c8, $ebebebeb, $bbbbbbbb, $3c3c3c3c, $83838383, $53535353, $99999999, $61616161, $17171717, $2b2b2b2b, $04040404, $7e7e7e7e, $babababa, $77777777, $d6d6d6d6, $26262626, $e1e1e1e1, $69696969, $14141414, $63636363, $55555555, $21212121, $0c0c0c0c, $7d7d7d7d);const rcon: ARRAY [0..9] OF SET32 = ( $01000000, $02000000, $04000000, $08000000, $10000000, $20000000, $40000000, $80000000, $1B000000, $36000000); (* for 128-bit blocks, Rijndael never uses more than 10 rcon values *) FUNCTION GetSet(CONST pt: ARRAY OF BYTE {Block}; pos: LONGINT): SET32; BEGIN GetSet := (LongInt(pt[pos ]) SHL 24) + (LongInt(pt[pos + 1]) SHL 16) + (LongInt(pt[pos + 2]) SHL 8) + LongInt(pt[pos + 3]) ; END { GetSet }; PROCEDURE PutSet(VAR ct: ARRAY OF BYTE {Block}; pos: LONGINT; st: SET32); BEGIN ct[pos ] := (st SHR 24); ct[pos + 1] := (st SHR 16) AND $FF; ct[pos + 2] := (st SHR 8) AND $FF; ct[pos + 3] := (st ) AND $FF; END { PutSet }; (** * Expand the cipher key into the encryption key schedule. * * @return the number of rounds for the given cipher key size. (assuming 128-bit i/o blocks) *) FUNCTION KeySetupEnc (VAR rk: ExpandedKey; CONST cipherKey: ARRAY OF BYTE {Block}; keyBits: LONGINT): LONGINT; { pre: keyBits in [128, 192, 256] } VAR i, p: LONGINT; temp: SET32; BEGIN p := 0; i := 0; rk[p ] := GetSet(cipherKey, 0); rk[p + 1] := GetSet(cipherKey, 4); rk[p + 2] := GetSet(cipherKey, 8); rk[p + 3] := GetSet(cipherKey, 12); IF keyBits = 128 THEN BEGIN WHILE TRUE DO BEGIN temp := rk[p + 3]; rk[p + 4] := rk[p] XOR (Te4[(temp SHR 16) AND $FF] AND $FF000000) XOR (Te4[(temp SHR 8) AND $FF] AND $00FF0000) XOR (Te4[(temp ) AND $FF] AND $0000FF00) XOR (Te4[(temp SHR 24) ] AND $000000FF) XOR rcon[i]; rk[p + 5] := rk[p + 1] XOR rk[p + 4]; rk[p + 6] := rk[p + 2] XOR rk[p + 5]; rk[p + 7] := rk[p + 3] XOR rk[p + 6]; INC(i); IF i = 10 THEN BEGIN KeySetupEnc := 10; Exit; END { IF }; INC(p, 4); END { WHILE }; END { IF }; rk[p + 4] := GetSet(cipherKey, 16); rk[p + 5] := GetSet(cipherKey, 20); IF keyBits = 192 THEN BEGIN WHILE TRUE DO BEGIN temp := rk[p + 5]; rk[p + 6] := rk[p] XOR (Te4[(temp SHR 16) AND $FF] AND $FF000000) XOR (Te4[(temp SHR 8) AND $FF] AND $00FF0000) XOR (Te4[(temp ) AND $FF] AND $0000FF00) XOR (Te4[(temp SHR 24) ] AND $000000FF) XOR rcon[i]; rk[p + 7] := rk[p + 1] XOR rk[p + 6]; rk[p + 8] := rk[p + 2] XOR rk[p + 7]; rk[p + 9] := rk[p + 3] XOR rk[p + 8]; INC(i); IF i = 8 THEN BEGIN KeySetupEnc := 12; Exit; END { IF }; rk[p + 10] := rk[p + 4] XOR rk[p + 9]; rk[p + 11] := rk[p + 5] XOR rk[p + 10]; INC(p, 6); END { WHILE }; END { IF }; rk[p + 6] := GetSet(cipherKey, 24); rk[p + 7] := GetSet(cipherKey, 28); IF keyBits = 256 THEN BEGIN WHILE TRUE DO BEGIN temp := rk[p + 7]; rk[p + 8] := rk[p] XOR (Te4[(temp SHR 16) AND $FF] AND $FF000000) XOR (Te4[(temp SHR 8) AND $FF] AND $00FF0000) XOR (Te4[(temp ) AND $FF] AND $0000FF00) XOR (Te4[(temp SHR 24) ] AND $000000FF) XOR rcon[i]; rk[p + 9] := rk[p + 1] XOR rk[p + 8]; rk[p + 10] := rk[p + 2] XOR rk[p + 9]; rk[p + 11] := rk[p + 3] XOR rk[p + 10]; INC(i); IF i = 7 THEN BEGIN KeySetupEnc := 14; Exit; END { IF }; temp := rk[p + 11]; rk[p + 12] := rk[p + 4] XOR (Te4[(temp SHR 24) ] AND $FF000000) XOR (Te4[(temp SHR 16) AND $FF] AND $00FF0000) XOR (Te4[(temp SHR 8) AND $FF] AND $0000FF00) XOR
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -