DES encryption decryption code

xiaoxiao2021-03-06  55

UNIT DESCRYPT;

Interfaceuses sysutils;

Function Encrypt (Astr: String; ACKEY: STRING): String; // Encrypted string ------------------------------- Function Decrypt (ASTR: STRING; ACKEY: STRING): String; // Decrypt string -------------------------------

IMPLEMentation

TYPE TBYTE32 = Array [1..32] of byte; tsdata = array [0..63] of byte; tblock = array [0..7] of byte;

Const sa1: tsdata = (1, 0, 1, 0, 0, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 0, 1, 0, 1, 1, 0, 1); SA2: TSDATA = (1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0, 0, 1, 0, 1,) 1, 0, 0, 1, 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 1); SA3: TSDATA = (1, 0, 1, 1, 0, 0, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 1, 1,) 0, 0, 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0) 1); SA4: TSDATA = (0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1, 1, 0, 0, 1, 0, 0) 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1), 0, 1, 1, 0, 1); SA5: Tsdata = (0, 1, 0, 0, 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, 0, 1, 1, 0) 1, 1, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 0, 0); SA6: TSDATA = (1, 0, 1, 1, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 0) 0, 0, 1, 1, 0, 1, 0, 1, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0) 0, 0, 1, 1, 0, 1, 1, 1, 1); SA7: TSDATA = (0, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0) 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1); SA8: Tsdata = (1, 0, 1, 0, 0, 1, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1);

SB1: TSDATA = (1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 1, 1, 1, 1, 0, 1) , 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1, 0) , 1, 1, 0, 0, 0, 1, 0, 0, 1, 1); SB2: TSDATA = (1, 0, 0, 1, 1, 0 , 0, 1, 0, 1, 0, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0) , 1, 0, 1, 1, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0 , 0, 1, 1, 1, 0, 1, 1, 0); SB3: TSDATA = (0, 0, 0, 1, 1, 0, 1, 1, 0, 1, 1, 1, 0, 1 , 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 0, 1, 0, 1, 1, 1, 0, 0, 1, 0) , 0, 0, 0, 0, 1, 1, 0, 1, 1, 0, 0, 1, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 1, 0, 1) ); SB4: TSDATA = (1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 0, 0, 1, 1, 1) , 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0, 0, 1, 1, 0, 0) , 1, 0, 1, 0, 1, 1, 0, 1, 1, 1); SB5: Tsdata = (0, 1, 1, 0, 1 , 0, 0, 1, 0, 1, 0, 1, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0) , 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 1, 1, 0, 0, 1, 0, 0, 1, 1, 0, 1, 0, 1, 1, 1, 0, 0, 0, 1, 1, 0); SB6: TSDATA = (1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0) 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 1, 0, 0) 1, 0, 1, 1, 0, 0, 1, 0, 1, 0, 1); SB7: TSDATA = (1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 0, 1, 1, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 0, 0, 1); SB8: TSDATA = (1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 0);

SC1: TSDATA = (1, 0, 0, 0, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 1, 0) , 0, 1, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0) , 1, 0, 0, 1, 1, 1, 1, 1, 0, 1, 0); SC2: TSDATA = (1, 0, 0, 1, 1, 1 , 1, 0, 0, 1, 1, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 1, 1, 0, 1) , 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, 1) , 1, 1, 1, 0, 0, 0, 1, 0); SC3: TSDATA = (1, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0) , 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0, 0, 1, 0, 0, 0, 1, 1) , 0, 1, 0, 1, 0, 0, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 1, 0, 1, 0) ); SC4: TSDATA = (1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1) , 0, 1, 0, 1, 1, 1, 0, 0, 0, 1, 1, 0, 1, 0, 1, 1, 0, 1, 0) , 0, 1, 1, 0, 0, 0, 0, 1, 0, 1, 1); SC5: TSDATA = (1, 0, 0, 0, 1 , 1, 1, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 0) , 0, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 1, 1, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1); SC6: TSDATA = (0, 0, 1, 1, 0, 1, 1, 0, 0, 0, 1, 0, 1, 1, 0, 1, 1, 1, 0, 1, 1, 0, 0, 0, 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 0, 1, 1, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0); SC7: TSDATA = (0, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 1, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0) 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0); SC8: TSDATA = (0, 1, 0, 0, 1, 1, 1, 0, 1, 0, 1, 1, 0, 0, 0, 1, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 1, 1);

SD1: TSDATA = (0, 0, 1, 1, 0, 1, 1, 0, 1, 0, 0, 0, 1, 1, 0, 1, 0, 1, 1, 0, 0, 0, 1) , 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 1, 0, 1, 1, 1, 0, 1, 0) , 1, 0, 0, 0, 0, 1, 1, 1, 1, 1); SD2: TSDATA = (1, 1, 0, 0, 0, 1 , 1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1) , 1, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 1, 1, 0, 0, 1, 1, 1, 0, 0) , 1, 0, 1, 0, 0, 1, 0, 1); SD3: TSDATA = (0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 0, 1, 1, 0 , 0, 0, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 1, 0, 1, 1) , 0, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 0, 0) ); SD4: TSDATA = (1, 1, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 1, 1, 0, 1) , 0, 1, 0, 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0) , 0, 1, 1, 0, 0, 1, 1, 0, 1, 0); SD5: TSDATA = (0, 0, 0, 1, 1 , 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1) , 0, 0, 0, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 1); SD6: TSDATA = (0, 1, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 1, 1, 1, 0, 1, 0, 1); SD7: TSDATA = (0, 1, 0, 0, 1, 0, 0, 1, 1, 0, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1, 1, 1, 0) 1, 0, 0, 1, 0); SD8: TSDATA = (1, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 1, 0, 1, 0, 0, 0, 1, 1, 0, 1, 0, 1, 1, 0, 1);

SC: array [1..16, 1..48] of byte =

((15, 18, 12, 25, 2, 6, 4, 1, 16, 7, 22, 11, 24, 20, 13, 5, 27, 9, 17, 8, 28, 21, 14, 3, 42, 53, 32, 38, 48, 56, 31, 41, 52, 46, 34, 49, 45, 50, 40, 29, 37, 30, 33), ( 16, 19, 13, 26, 3, 7, 5, 2, 17, 8, 23, 12, 25, 21, 14, 6, 28, 10, 18, 9, 1, 22, 15, 4, 43, 54, 33, 39, 49, 29, 32, 42, 53, 47, 35, 50, 46, 51, 41, 30, 36, 55, 48, 44, 52, 38, 31, 34), (18, 21, 15, 28, 5, 9, 7, 4, 19, 10, 25, 14, 27, 23, 16, 8, 2, 12, 20, 11, 3, 24, 17, 6, 45, 56, 35, 41, 51, 31, 34, 44, 55, 49, 37, 52, 48, 53, 43, 32, 38, 29, 50, 46, 54, 40, 33, 36), (20, 23, 17, 2, 7, 11, 9, 6, 21, 12, 27, 16, 1, 25, 18, 10, 4, 14, 22, 13, 5, 26, 19, 8, 47, 30, 37, 43, 53, 33, 36, 46, 29, 51, 39, 54, 50, 55, 45, 34, 40, 31, 52, 48, 56, 42, 35, 38), (22, 25, 19, 4, 9, 13, 11, 8, 23, 14, 1, 18, 3, 27, 20, 12, 6, 16, 24, 15, 7, 28, 21, 10, 49, 32, 39, 45, 55, 35, 38, 48, 31, 53, 41, 56, 52, 29, 47, 36, 42, 33, 54, 50, 30, 44, 37, 40), (24, 27, 21, 6, 11, 15, 13, 10, 25, 16, 3, 20, 5, 1, 22, 14, 8, 18, 26, 17, 9, 2, 23, 12, 51, 34, 41, 47, 29, 37, 40, 50, 33, 55, 43, 30, 54, 31, 49, 38, 44, 35, 56, 52, 32, 46, 39, 42), (26, 1, 23, 8, 13, 17, 15, 12, 27, 18, 5, 22, 7, 3, 24, 16, 10, 20, 28, 19, 11, 4, 25, 14, 53, 36, 43, 49, 31, 39, 42, 52, 35, 29, 45, 32, 56, 33, 51, 40, 46, 37, 30, 54, 34, 48, 41, 44), (28, 3, 25, 10, 15, 19, 17, 14, 1, 20, 7, 24, 9, 5, 26, 18, 12, 22, 2, 21, 13, 6, 27, 16, 55, 38, 45, 51, 33, 41, 44, 54, 37, 31, 47, 34, 30, 35, 53, 42, 48, 39, 32, 56, 36, 50, 43, 46), (1, 4, 26, 11, 16, 20, 18, 15, 2, 21, 8, 25, 10, 6, 27, 19, 13, 23, 3, 22, 14, 7, 28, 17, 56, 39, 46, 52, 34, 42, 45, 55, 38, 32, 48, 35, 31, 36, 54, 43, 49, 40, 33, 29, 37, 51, 44, 47), (3, 6, 28, 13,

18, 22, 20, 17, 4, 23, 10, 27, 12, 8, 1, 21, 15, 25, 5, 24, 16, 9, 2, 19, 30, 41, 48, 54, 36, 44, 47, 29, 40, 34, 50, 37, 33, 38, 56, 45, 51, 42, 35, 31, 39, 53, 46, 49), (5, 8, 2, 15, 20, 24, 22, 19, 6, 25, 12, 1, 14, 10, 3, 23, 17, 27, 7, 26, 18, 11, 4, 21, 32, 43, 50, 56, 38, 46, 49, 31, 42, 36, 52, 39, 35, 40, 30, 47, 53, 44, 37, 33, 41, 55, 48, 51), (7, 10, 4, 17, 22, 26, 24, 21, 8, 27, 14, 3, 16, 12, 5, 25, 19, 1, 9, 28, 20, 13, 6, 23, 34, 45, 52, 30, 40, 48, 51, 33, 44, 38, 54, 41, 37, 42, 32, 49, 55, 46, 39, 35, 43, 29, 50, 53), (9, 12, 6, 19, 24, 28, 26, 23, 10, 1, 16, 5, 18, 14, 7, 27, 21, 3, 11, 2, 22, 15, 8, 25, 36, 47, 54, 32, 42, 50, 53, 35, 46, 40, 56, 43, 39, 44, 34, 51, 29, 48, 41, 37, 45, 31, 52, 55), (11, 14, 21, 26, 2, 28, 25, 12, 3, 18, 7, 20, 16, 9, 1, 23, 5, 13, 4, 24, 17, 10, 27, 38, 49, 56, 34, 44, 52, 55, 37, 48, 42, 30, 45, 41, 46, 36, 53, 31, 50, 43, 39, 47, 33, 54, 29), (13, 16, 10, 23, 28, 4, 2, 27, 14, 5, 20, 9, 22, 18, 11 , 3, 25, 7, 15, 6, 26, 19, 12, 1, 40, 51, 30, 36, 46, 54, 29, 39, 50, 44, 32, 47, 43, 48, 38, 55 , 33, 52, 45, 41, 49, 35, 56, 31), (14, 17, 11, 24, 1, 5, 3, 28, 15, 6, 21, 10, 23, 19, 12, 4 , 26, 8, 16, 7, 27, 20, 13, 2, 41, 52, 31, 37, 47, 55, 30, 40, 51, 45, 33, 48, 44, 49, 39, 56, 34 , 53, 46, 42, 50, 36, 29, 32)); Var g: array [1..16, 1..48] of byte; l, r, f: Tbyte32; C: array [1 .. 56] OF BYTE;

Procedure des_init (key: tblock; fcode: boolean); var n, h: byte; begin c [1]: = ORD (key [7] and 128> 0); c [29]: = ORD (key [7] And 2> 0); C [2]: = ORD (Key [6] and 128> 0); C [30]: = ORD (Key [6] and 2> 0); C [3]: = ORD ( Key [5] and 128> 0); C [31]: = ORD (Key [5] and 2> 0); C [4]: ​​= ORD (Key [4] and 128> 0); C [32] : = ORD (Key [4] and 2> 0); C [5]: = ORD (Key [3] and 128> 0); C [33]: = ORD (key [3] and 2> 0); C [6]: = ORD (Key [2] and 128> 0); C [34]: = ORD (key [2] and 2> 0); C [7]: = ord (key [1] and 128 > 0); C [35]: = ORD (Key [1] and 2> 0); C [8]: = ORD (key [0] and 128> 0); C [36]: = ORD (Key [ 0] And 2> 0); C [9]: = ORD (Key [7] and 64> 0); C [37]: = ORD (Key [7] and 4> 0); C [10]: = ORD (Key [6] and 64> 0); C [38]: = ORD (Key [6] and 4> 0); C [11]: = ORD (Key [5] and 64> 0); C [ 39]: = ORD (Key [5] and 4> 0); C [12]: = ORD (Key [4] and 64> 0); C [40]: = ORD (key [4] and 4> 0 C [13]: = ORD (Key [3] and 64> 0); C [41]: = ORD (Key [3] and 4> 0); C [14]: = ORD (key [2] And 64> 0); C [42]: = ORD (key [2] and 4 > 0); C [15]: = ORD (Key [1] and 64> 0); C [43]: = ORD (key [1] and 4> 0); C [16]: = ORD (Key [ 0] AND 64> 0); C [44]: = ORD (key [0] and 4> 0);

C [17]: = ORD (Key [7] and 32> 0); C [45]: = ORD (key [7] and 8> 0); C [18]: = ord (key [6] and 32 > 0); C [46]: = ORD (Key [6] and 8> 0); C [19]: = ORD (Key [5] and 32> 0); C [47]: = ORD (Key [ 5] and 8> 0); C [20]: = ORD (Key [4] and 32> 0); C [48]: = ORD (key [4] and 8> 0); C [21]: = ORD (Key [3] and 32> 0); C [49]: = ORD (Key [3] and 8> 0); C [22]: = ORD (Key [2] and 32> 0); C [ 50]: = ORD (Key [2] and 8> 0); C [23]: = ORD (Key [1] and 32> 0); C [51]: = ORD (key [1] and 8> 0 ); C [24]: = ORD (key [0] and 32> 0); C [52]: = ORD (key [0] and 8> 0); C [25]: = ORD (key [7] And 16> 0); C [53]: = ORD (Key [3] and 16> 0); C [26]: = ORD (Key [6] and 16> 0); C [54]: = ORD ( Key [2] and 16> 0); C [27]: = ORD (Key [5] and 16> 0); C [55]: = ORD (key [1] and 16> 0); C [28] : = ORD (Key [4] and 16> 0); C [56]: = ORD (Key [0] and 16> 0);

IF fcode kiln: = 1 to 16 do begin for h: = 1 to 48 do begin g [n, h]: = C [sc [n, h]]; end; end; end else begin for n: = 1 to 16 do begin for h: = 1 to 48 do begin g [17 - n, h]: = C [SC [n, h]]; end; end; end; end;

Procedure des_code (INPUT: TBLOCK; var N: Byte; z: word; begin L [1]: = ORD (Input [7] and 64> 0); R [1]: = ORD (Input [7] and 128> 0); L [2]: = ORD (INPUT [6] and 64> 0); R [2]: = ORD (Input [6] and 128> 0); L [3]: = ORD (INPUT [5] and 64> 0); R [3]: = ORD (Input [5] and 128> 0); L [4]: ​​= ORD (Input [4] and 64> 0); R [4]: = ORD (INPUT [4] and 128> 0); L [5]: = ORD (Input [3] and 64> 0); R [5]: = ORD (Input [3] and 128> 0); L [6]: = ORD (INPUT [2] and 64> 0); R [6]: = ORD (Input [2] and 128> 0); L [7]: = ORD (Input [1 ] and 64> 0); R [7]: = ORD (Input [1] and 128> 0); L [8]: = ORD (INPUT [0] and 64> 0); R [8]: = ORD (INPUT [0] and 128> 0); L [9]: = ORD (Input [7] and 16> 0); R [9]: = ORD (Input [7] and 32> 0); L [10 ]: = ORD (INPUT [6] and 16> 0); R [10]: = ORD (Input [6] and 32> 0); L [11]: = ORD (Input [5] and 16> 0) ; R [11]: = ORD (INPUT [5] and 32> 0); L [12]: = ORD (Input [4] and 16> 0); R [12]: = ORD (Input [4] and 32> 0); L [13]: = ORD (INPUT [3] and 16> 0); R [13]: = ORD (Input [3] AND 32> 0); L [14]: = ORD (Input [2] and 16> 0); R [14]: = ORD (Input [2] and 32> 0); L [15]: = ORD ( INPUT [1] and 16> 0); R [15]: = ORD (Input [1] and 32> 0); L [16]: = ORD (Input [0] and 16> 0); R [16] : = ORD (INPUT [0] and 32> 0); L [17]: = ORD (Input [7] and 4> 0); R [17]: = ORD (Input [7] and 8> 0); L [18]: = ORD (Input [6] and 4> 0); R [18]: = ORD (Input [6] and 8> 0); L [19]: = ORD (Input [5] and 4 > 0); R [19]: = ORD (INPUT [5] and 8> 0); L [20]: = ORD (Input [4] and 4> 0);

R [20]: = ORD (INPUT [4] and 8> 0); L [21]: = ORD (Input [3] and 4> 0); R [21]: = ORD (Input [3] and 8 > 0); L [22]: = ORD (Input [2] and 4> 0); R [22]: = ORD (Input [2] and 8> 0); L [23]: = ORD (Input [ 1] and 4> 0); R [23]: = ORD (Input [1] and 8> 0); L [24]: = ORD (Input [0] and 4> 0); R [24]: = ORD (INPUT [0] and 8> 0); L [25]: = INPUT [7] and 1; r [25]: = ORD (Input [7] and 2> 0); L [26]: = Input [6] and 1; r [26]: = ORD (Input [6] and 2> 0); L [27]: = INPUT [5] and 1; r [27]: = ORD (Input [5] and 2> 0); L [28]: = INPUT [4] and 1; r [28]: = ORD (INPUT [4] and 2> 0); L [29]: = INPUT [3] and 1; r [29]: = ORD (INPUT [3] and 2> 0); L [30]: = INPUT [2] and 1; r [30]: = ORD (Input [2] and 2> 0); L [ 31]: = INPUT [1] and 1; R [31]: = ORD (Input [1] and 2> 0); L [32]: = INPUT [0] and 1; r [32]: = Ord ( INPUT [0] and 2> 0); for n: = 1 to 16 do begin z: = ((R [32] xor g [n, 1]) SHL 5) OR ((R [5] xor g [n , 6]) SHL 4) OR ((R [1] XOR G [N, 2]) SHL 3) OR ((R [2] xor g [n, 3]) SHL 2) OR ((R [3] xor g [n, 4]) SHL 1) or (r [4] xor g [n, 5 ]); F [9]: = L [9] xor sa1 [z]; f [17]: = L [17] xor sb1 [z]; f [23]: = L [23] xor sc1 [z] ; F [31]: = L [31] xor SD1 [Z];

Z: = ((R [4] xor g [n, 7]) SHL 5) OR ((R [9] xor g [n, 12]) SHL 4) OR ((R [5] xor g [n, 8]) SHL 3) OR ((R [6] xor g [n, 9]) SHL 2) OR ((R [7] XOR G [N, 10]) SHL 1) or (R [8] xor g [N, 11]); f [13]: = L [13] xor sa2 [z]; f [28]: = L [28] xor sb2 [z]; f [2]: = L [2] xor SC2 [Z]; F [18]: = L [18] XOR SD2 [Z];

Z: = ((R [8] XOR G [N, 13]) SHL 5) OR ((R [13] XOR G [N, 18]) SHL 4) OR ((R [9] xor g [N, 14]) SHL 3) OR ((R [10] XOR G [N, 15]) SHL 2) OR ((R [11] xor g [n, 16]) SHL 1) or (r [12] xor g [n, 17]); f [24]: = L [24] xor sa3 [z]; f [16]: = L [16] xor sb3 [z]; f [30]: = L [30] xor SC3 [Z]; F [6]: = L [6] xor sd3 [z]; z: = ((R [12] xor g [n, 19]) SHL 5) OR ((R [17] xor g [N, 24]) SHL 4) OR ((R [13] xor g [n, 20]) SHL 3) OR ((R [14] xor g [n, 21]) SHL 2) or ((R [ 15] XOR g [n, 22]) SHL 1) or (r [16] xor g [n, 23]); f [26]: = L [26] xor sa4 [z]; f [20]: = L [20] XOR SB4 [Z]; F [10]: = L [10] xor sc4 [z]; f [1]: = L [1] xor sd4 [z];

Z: = (((R [16] XOR G [N, 25]) SHL 5) OR ((R [21] XOR G [N, 30]) SHL 4) OR ((R [17] xor g [N, 26]) SHL 3) OR ((R [18] XOR G [N, 27]) SHL 2) OR ((R [19] xor g [n, 28]) shl 1) or (R [20] xor g [n, 29]); f [8]: = L [8] xor sa5 [z]; f [14]: = L [14] xor sb5 [z]; f [25]: = L [25] xor SC5 [Z]; F [3]: = L [3] xor sd5 [z];

Z: = (((R [20] XOR G [N, 31]) SHL 5) OR ((R [25] XOR G [N, 36]) SHL 4) OR ((R [21] xor g [n, 32]) SHL 3) OR ((R [22] xor g [n, 33]) SHL 2) OR ((R [23] XOR G [N, 34]) SHL 1) or (R [24] xor g [n, 35]); f [4]: ​​= L [4] xor sa6 [z]; f [29]: = L [29] xor sb6 [z]; f [11]: = L [11] xor SC6 [Z]; F [19]: = L [19] xor sd6 [z];

Z: = (((R [24] XOR G [N, 37]) SHL 5) OR ((R [29] XOR G [N, 42]) SHL 4) OR ((R [25] xor g [n, 38]) SHL 3) OR ((R [26] XOR G [N, 39]) SHL 2) OR ((R [27] xor g [n, 40]) SHL 1) or (R [28] xor g [n, 41]); f [32]: = L [32] xor sa7 [z]; f [12]: = L [12] xor sb7 [z]; f [22]: = L [22] xor SC7 [Z]; F [7]: = L [7] XOR SD7 [Z];

Z: = ((R [28] xor g [n, 43]) SHL 5) OR ((R [1] XOR G [N, 48]) SHL 4) OR ((R [29] xor g [n, 44]) SHL 3) OR ((R [30] XOR G [N, 45]) SHL 2) OR ((R [31] xor g [n, 46]) SHL 1) OR (R [32] xor g [N, 47]); F [5]: = L [5] xor sa8 [z]; f [27]: = L [27] xor sb8 [z]; f [15]: = L [15] xor SC8 [Z]; F [21]: = L [21] XOR SD8 [Z]; L: = R; R: = F; End; Output [0]: = (L [8] SHL 7) OR (r [8] SHL 6) OR (L [16] SHL 5) OR (L [24] SHL 3) OR (R [24] SHL 2) OR (L [32] SHL 1 ) OR R [32]; OUTPUT [1]: = (L [7] SHL 7) or (R [7] SHL 6) OR (L [15] SHL 5) OR (R [15] SHL 4) OR L [23] SHL 3) OR (R [23] SHL 2) OR (L [31] SHL 1) OR R [31]; OTPUT [2]: = (L [6] SHL 7) or (R [6 ] SHL 6) OR (L [14] SHL 4) OR (L [22] SHL 3) OR (R [22] SHL 2) OR (L [30] shl 1) or R [30]; OUTPUT [3]: = (L [5] SHL 7) OR (R [5] SHL 6) OR (L [13] SHL 5) OR (R [13] SHL 4) or (L [L 21] SHL 3) OR (R [21] SHL 2) OR (L [29] SHL 1) OR R [29]; OUTPUT [4]: ​​= (L [4] SHL 7) or (R [4] SHL 6) OR (L [12] SHL 5) OR (R [12] SHL 4) OR (L [20 ] SHL 3) OR (R [20] SHL 2) OR (L [28] SHL 1) OR R [28]; OUTPUT [5]: = (L [3] SHL 7) OR (R [3] SHL 6 ) or (l [11] shl 4) or (l [19] shl 3) or (R [19] shl 2) or (L [27] shl 1) or R [27 ]; OUTPUT [6]: = (L [2] SHL 7) OR (R [2] SHL 6) OR (L [10] SHL 5) OR (R [10] SHL 4) OR (L [18] SHL 3) OR (R [18] SHL 2) OR (L [26] SHL 1) OR R [26]; OUTPUT [7]: = (L [1] SHL 7) or (R [1] shl 6) OR (L [9] SHL 5) OR (R [17] SHL 3) OR (R [17] SHL 2) OR (L [25] SHL 1) or R [25]; END;

Function StrtoKey: TBLOCK; VAR Key: TBlock; I: Integer; Begin Fillchar (Key, SizeOf (TBLOCK), 0); for i: = 1 to Length (Akey) Do Begin Key [i mod sizeof TBLOCK]: = KEY [I mod sizeof (tblock)] ORD (AKEY [i]); end; result: = key;

Function Encrypt (ASTR: STRING; ACKEY: STRING): String; var readbuf: tblock; writebuf: tblock; key: tblock; count: integer; OFFSET: Integer

I: integer; s: string; begin result: = ';

Key: = STRTOKEY (ACKEY); DES_INIT (KEY, TRUE);

Offset: = 1; count: = length (astr); Repeat S: = Copy (Astr, Offset, 8); Fillchar (Readbuf, 8, 0); Move (S [1], Readbuf, Length (s)); Des_code (Readbuf, Writebuf);

For i: = 0 to 7 do begin result: = Result INTTOHEX (WriteBuf [i], 2);

Offset: = Offset 8; Until Offset> ((Count 7) DIV 8) * 8;

function DeCrypt (aStr: string; acKey: string): string; var ReadBuf, WriteBuf: TBlock; Key: TBlock; Offset: Integer; Count: Integer; I: Integer; S: string; begin try Key: = StrToKey (acKey) DES_INIT (KEY, FALSE); S: = ''; i: = 1; Repeat S: = S CHR (STRTOINT ('$' COPY (ASTR, I, 2))); Inc (i, 2) Until I> Length (astr);

OFFSET: = 1; count: = Length (s); while offset <(count 7) DIV 8 * 8) Do Begin Fillchar (Readbuf, 8, 0); Move (s [offset], readbuf, 8); Des_code (Readbuf, Writebuf);

For i: = 0 to 7 do begin result: = Result chr (WriteBuf [i]); END;

OFFSET: = OFFSET 8; END;

Result: = StrPas (Pchar (Result); Except Result: = '; End; end;

转载请注明原文地址:https://www.9cbs.com/read-73047.html

New Post(0)