⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rijndael.pas

📁 AES Source Code in Pascal
💻 PAS
📖 第 1 页 / 共 4 页
字号:
    $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 + -