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

📄 des.dem

📁 Delphi Pascal 数据挖掘领域算法包 数值算法大全
💻 DEM
字号:
PROGRAM d7r13 (input,output,dfile);
(* driver for routine DES *)
LABEL 5,10,99;
TYPE
   gl32array = ARRAY [1..32] OF integer;
   gl48array = ARRAY [1..48] OF integer;
   gl56array = ARRAY [1..56] OF integer;
   gl64array = ARRAY [1..64] OF integer;
VAR
   glicd,ipc1 : gl56array;
   i,idirec,idum,j,jdum,k,l : integer;
   m,mm,nciphr,newkey,twopwr : integer;
   icmp,iin,iout,key,ip,ipm : gl64array;
   hin,hkey,hout,hcmp : string[17];
   verdct : string[8];
   txt : string[60];
   txt2 : string[6];
   ipc2,iet : gl48array;
   ipp : gl32array;
   is : ARRAY [1..16,1..4,1..8] OF integer;
   ibin : ARRAY [1..4,1..16] OF integer;
   ksflg,cyflg,desflg : boolean;
   dfile : text;

(*$I MODFILE.PAS *)

(*$I DESKS.PAS *)

(*$I DES.PAS *)

FUNCTION hex2int(ch:char) : integer;
(* Coverts character representing hexadecimal number to its integer
value in a machine-independent way. *)
BEGIN
   IF (ch >= '0') AND (ch <= '9') THEN
      hex2int := ord(ch)-ord('0')
   ELSE
      hex2int := ord(ch)-ord('A')+10
END;
FUNCTION int2hex(i:integer) : char;
(* Inverse of hex2int *)
BEGIN
   IF i <= 9 THEN
      int2hex := chr(i+ord('0'))
   ELSE
      int2hex := chr(i-10+ord('A'))
END;

BEGIN
   ksflg := true;
   cyflg := true;
   desflg := true;
   glopen(dfile,'destst.dat');
   readln (dfile,txt);
   writeln (txt);
5:   readln (dfile,txt);
   IF eof(dfile) THEN GOTO 99;
   writeln (txt);
   readln (dfile,nciphr);
   readln (dfile,txt2);
   IF (txt2 = 'encode') THEN idirec := 0;
   IF (txt2 = 'decode') THEN idirec := 1;
10:   writeln ('key':10,'plaintext':20,
      'expected cipher':21,'actual cipher':15);
   mm := 16;
   IF (nciphr < 16) THEN mm := nciphr;
   nciphr := nciphr-16;
   FOR m := 1 to mm DO BEGIN
      readln(dfile,hkey,hin,hcmp);
      FOR i := 1 to 16 DO BEGIN
         j := i+1;
         idum := hex2int(hin[j]);
         jdum := hex2int(hkey[j]);
         FOR k := 1 to 4 DO BEGIN
            l := 4*i+1-k;
            iin[l] := idum MOD 2;
            idum := idum DIV 2;
            key[l] := jdum MOD 2;
            jdum := jdum DIV 2
         END
      END;
      newkey := 1;
      des(iin,key,newkey,idirec,iout);
      hout := '                 ';
      FOR i := 1 to 16 DO BEGIN
         jdum := 0;
         twopwr := 16;
         FOR j := 1 to 4 DO BEGIN
            twopwr := twopwr DIV 2;
            jdum := jdum+twopwr*iout[4*(i-1)+j]
         END;
         hout[i+1] := int2hex(jdum)
      END;
      verdct := 'wrong   ';
      IF (hcmp = hout) THEN verdct := 'o.k.    ';
      writeln(hkey,hin,hcmp,hout,verdct:10)
   END;
   writeln ('press RETURN to continue ...');
   readln;
   IF (nciphr <= 0) THEN GOTO 5;
   GOTO 10;
99:
END.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -