Advertisement
Guest User

Untitled

a guest
Aug 19th, 2017
95
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Delphi 2.58 KB | None | 0 0
  1. type TDESblock=array [1..8] of byte;
  2. type TDES32bit=array [1..4] of Byte;
  3. type TDES48bit=array [1..6] of Byte;
  4.  
  5. const PreMutArray: array [1..64] of Byte=(58,   50, 42, 34, 26, 18, 10, 2, 60, 52, 44, 36, 28, 20, 12, 4,
  6.                                           62, 54, 46, 38, 30, 22, 14, 6, 64, 56, 48, 40, 32, 24, 16, 8,
  7.                                           57, 49, 41, 33, 25, 17, 9, 1, 59, 51, 43, 35, 27, 19, 11, 3,
  8.                                           61,   53, 45, 37, 29, 21, 13, 5, 63, 55, 47, 39, 31, 23, 15, 7);
  9.  
  10. LastPreMutArray: array [1..64] of Byte=(40, 8, 48, 16, 56, 24, 64, 32, 39, 7, 47, 15, 55, 23, 63, 31,
  11.                                     38, 6, 46, 14, 54, 22, 62, 30, 37, 5, 45, 13, 53, 21, 61, 29,
  12.                                     36, 4, 44, 12, 52, 20, 60, 28, 35, 3,   43, 11, 51, 19, 59, 27,
  13.                                     34, 2, 42, 10, 50, 18, 58, 26, 33, 1, 41, 9, 49, 17, 57, 25);
  14.  
  15. ExtendArray: array [1..48] of byte=(32, 1,  2,  3,  4,  5,
  16.                                     4,  5,  6,  7,  8,  9,
  17.                                     8,  9,  10, 11, 12, 13,
  18.                                     12, 13, 14, 15, 16, 17,
  19.                                     16, 17, 18, 19, 20, 21,
  20.                                     20, 21, 22, 23, 24, 25,
  21.                                     24, 25, 26, 27, 28, 29,
  22.                                     28, 29, 30, 31, 32, 1);
  23.  
  24.  
  25. procedure DESEncrypt(InBlock: Pointer; OutBlock: Pointer; Key: Pointer);
  26.  
  27. implementation
  28.  
  29. function DESBlockGetBit(Block: pointer; NBit: dword): bool;
  30. begin
  31.   result:=false;
  32.   if ((byte(pointer(dword(Block)+(NBit div 8))^)) and (1 shl (NBit mod 8))>0) then result:=true;
  33. end;
  34.  
  35. procedure DESBlockSetBit(Block: pointer; NBit: dword);
  36. begin
  37.   byte(pointer(dword(Block)+(NBit div 8))^):=byte(pointer(dword(Block)+(NBit div 8))^) or (1 shl (NBit mod 8));
  38. end;
  39.  
  40. procedure DESBlockClrBit(Block: pointer; NBit: dword);
  41. begin
  42.   byte(pointer(dword(Block)+(NBit div 8))^):=byte(pointer(dword(Block)+(NBit div 8))^) and (not (1 shl (NBit mod 8)));
  43. end;
  44.  
  45. function InitialPremutation(block: TDESBlock):TDESblock;
  46. var i: dword;
  47. begin
  48.   ZeroMemory(@Result, 8);
  49.   for i:=1 to 64 do
  50.   begin
  51.     if DESBlockGetBit(@Block, i) then DESBlockSetBit(@Result, PreMutArray[i]);
  52.   end;
  53. end;
  54.  
  55. function E(Rvect: TDES32bit): TDES48bit;
  56. var i: dword;
  57. begin
  58.   ZeroMemory(@result, 6);
  59.   for i:=1 to 48 do
  60.   begin
  61.     if DESBlockGetBit(@Rvect, ExtendArray[i]) then DESBlockSetBit(@result, i);
  62.   end;
  63. end;
  64.  
  65. function F(Rvect: TDES32bit; Key: TDES48bit): TDES32bit;
  66. var ExtendedRvect: TDES48bit;
  67. begin
  68.   E(Rvect);
  69. end;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement