CRYPT.PAS 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. type
  2. header=record
  3. title:array [1..22] of char;
  4. name:array [1..8] of char;
  5. pass:array [1..5] of char;
  6. end;
  7. const
  8. hh='Закодированный файл'#13#10#26;
  9. var
  10. f1,f2:file;
  11. t:header;
  12. buf:array [1..5000] of word;
  13. p1,p2:array [1..5] of char;
  14. m:word;
  15. s:string;
  16. w:word;
  17. function readkeyword:word; inline($b4/0/$cd/$16);
  18. procedure getpass(mess:string; var p);
  19. var
  20. pp:array [1..5] of byte absolute p;
  21. i,n:byte;
  22. ww:array [1..2] of byte absolute w;
  23. begin
  24. write(mess);
  25. s:='';
  26. write('░░░░░░░░░░░░░░░░░░░░'#8#8#8#8#8#8#8#8#8#8#8#8#8#8#8#8#8#8#8#8);
  27. repeat
  28. m:=readkeyword;
  29. if m=$0E08 then
  30. if s<>'' then
  31. begin
  32. write(#8#176#8);
  33. delete(s,length(s)-1,2);
  34. end else
  35. else
  36. if (m<>$1C0D) and (length(s)<40) then
  37. begin
  38. s:=s+chr(lo(m))+chr(hi(m));
  39. write(#219);
  40. end;
  41. until m=$1C0D;
  42. fillchar(pp,5,0);
  43. w:=0;
  44. for i:=1 to length(s) do
  45. begin
  46. n:=ord(s[i]);
  47. pp[1]:=pp[1]+n;
  48. pp[2]:=pp[2]-n;
  49. pp[3]:=pp[3] xor n;
  50. pp[4]:=pp[4]+pp[1]+n;
  51. pp[5]:=pp[5]-pp[2]-n;
  52. ww[1]:=ww[1]+n;
  53. ww[2]:=ww[2] xor n;
  54. end;
  55. writeln;
  56. end;
  57. procedure help;
  58. begin
  59. writeln(#13#10'Вызов : CF <вх_файл> <вых_файл>');
  60. halt;
  61. end;
  62. procedure code(mess:string);
  63. var
  64. l,l1:longint;
  65. k,i:word;
  66. begin
  67. l:=filepos(f1); l1:=filesize(f1);
  68. while not eof(f1) do
  69. begin
  70. blockread(f1,buf,10000,k);
  71. for i:=1 to k div 2 do buf[i]:=buf[i] xor w;
  72. blockwrite(f2,buf,k);
  73. inc(l,k);
  74. write(mess);
  75. write((l/l1)*100:6:1,'%'#13);
  76. end;
  77. writeln;
  78. end;
  79. procedure work;
  80. begin
  81. reset(f1,1);
  82. rewrite(f2,1);
  83. blockread(f1,t,sizeof(t));
  84. if t.title<>hh then
  85. begin { Кодируем f1 в f2 }
  86. seek(f1,0);
  87. repeat
  88. getpass('Введите пароль : ',p1);
  89. getpass('И еще разок : ',p2);
  90. if p1<>p2 then writeln('Ошибочка !');
  91. until p1=p2;
  92. t.title:=hh;
  93. t.name:='????????';
  94. move(p1,t.pass,5);
  95. blockwrite(f2,t,sizeof(t));
  96. code('Кодирование : ');
  97. end else
  98. begin
  99. getpass('Введите пароль : ',p1);
  100. if p1<>t.pass then writeln('Ошибочка !') else
  101. begin
  102. seek(f1,0);
  103. blockread(f1,t,sizeof(t));
  104. code('Раскодирование : ');
  105. end;
  106. end;
  107. end;
  108. begin
  109. writeln('File Coder V1.0 (C) SEEM Group, 1993'#13#10);
  110. if paramcount<>2 then help;
  111. assign(f1,paramstr(1));
  112. assign(f2,paramstr(2));
  113. work;
  114. close(f1);
  115. close(f2);
  116. end.