Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Файловая система
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

 
 
Опции темы Поиск в этой теме Опции просмотра
  #11  
Старый 23.05.2014, 04:25
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

У меня сначло вылезло переполнение стека, изменив размер b8in,b8out с 1го мб до 10ти кб оно исчезло, дальше оказалась перепутана загрузка файла в 2D массив
Код:
1
2
for i:=0 to sizefile8 do
    for i1:=0 to 7 do OpenFile.Read(b8in[i,i1],1);
а должно быть как
Код:
1
2
for i:=0 to 7 do
    for i1:=0 to sizefile8 do OpenFile.Read(b8in[i,i1],1);
, потом смотрите "циклические" переменные - кое где вместо i (она в этот момент вообще без содержимого) нужно вставить или i4 или i2, вам виднее

Ошибки (почти, много предупреждений от СР) исчезли, файлы открылись/перезаписались, шифровки нет - алгоритм не ведом, другими словами, вот вам юнит, крутите дальше сами

Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;
 
type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
 
key: array[0..9] of byte = (123,60,48,50,89,33,145,97,56,29);
 
implementation
 
{$R *.dfm}
 
procedure TForm1.Button1Click(Sender: TObject);
var
 nom, razmerhvosta, bs, bs1, s1: byte;
 razmer, change, sxor, sizefile8: int64;
 keyround: array[0..31] of int64;
 b8in, b8out: array[0..7, 0..10000] of byte;
//  b8in, b8out: array[0..7, 0..1000000] of byte;
 openfl, closefl: TFileStream;
i, i1, i2, i4: integer;
 
const
sbox: array [1..16] of byte = (5,14,15,8,12,1,2,13,11,4,6,3,0,7,9,10);
pbox: array [1..64] of byte = (0,4,8,12,16,20,24,28,32,36,40,44,48,52,56,60,1,
                               5,9,13,17,21,25,29,33,37,41,45,49,53,57,
                               61,2,6,10,14,18,22,26,30,34,38,42,46,5,54,58,
                               62,3,7,11,15,19,23,27,31,35,39,43,47,51,55,59,63);
 
 
begin
 
//загрузка файлов
 
OpenFl:=TFileStream.Create('text.txt',fmOpenRead);
OpenFl.Position:=0;
 
CloseFl:=TFileStream.Create('crypted.bin',fmCreate);
CloseFl.Position:=0;
 
sizefile8:= OpenFl.Size div 8;
 
 
//загрузка файлов
 
 
//загрузка файла в двумерный массив
 
 for i:=0 to 7 do
  for i1:=0 to sizefile8 do OpenFl.Read(b8in[i, i1], 1);
 
razmerhvosta:= OpenFl.Size - sizefile8 * 8;
 
if (razmerhvosta > 0) then
   for i2:= i1 to razmerhvosta do OpenFl.Read(b8in[i+1, i2], 1);
 
if (razmerhvosta < 7) then
    for  i2:=i2 to 7 do OpenFl.Read(b8in[i+1,i2],1);
 
 
//загрузка файла в двумерный массив
 
 
for i:=0 to 31 do    //генерация клбючей
 
  begin
 
  for nom:=0 to 7 do
  begin
  change:= key[nom] shl (8 * (7 - nom));   //сдвиг битов ключа на Х  бит
  Inc(keyround[i], change);
  end;
 
  change:=keyround[i1];
  razmer:= change shr 60;
//  razmer:=sbox[change];
  razmer:=razmer shl 60;
  change:=razmer + ((change shl 4) shr 4 );
 
  razmer:=(change shl  44) shr 59;
  razmer:= razmer xor i;
  razmer:=razmer shl 15;
 
  change:=((change shr 20) shl 20) + ((change shl 49) shl 49) + razmer;
 
  keyround[i]:=change;
 
  end//генерация ключей
 
  //i - цмкл сети SP,
 
  for i4:=0 to (sizefile8 + 1) do
 
  for i:=0 to 30 do       //сеть SP
    begin
 
    //Key XOR->  заполняем sxor:int64 байтами входного, ксорим и пишем назад
 
       for i1:=0 to 7 do  sxor:=sxor + (b8in[i4,i1]) shl (7 - i1);
 
       sxor:=sxor xor keyround[i];
 
       for i1:=0 to 7 do b8in[i4,i1]:=sxor shr (7-i1);
       //key xor
 
 
       //Sbox перестановка->
 
       i1:=0;
 
   for i2:=0 to 7 do
   begin
   Inc(i1);
   nom:=sbox[i1] div 2;
   if (sbox[i1] mod 2 = 0) then begin
                               bs:=b8in[i4,nom] shr 4;
                               bs:=bs shl 4;
                               end
                          else bs:= b8in[i4,nom] shl 4;
 
   Inc(i1);
   nom:=sbox[i1] div 2;
   if (sbox[i1] mod 2 = 0) then bs1:=b8in[i4,nom] shr 4
                          else begin
                               bs1:=b8in[i4,nom] shl 4;
                               bs1:=bs1 shr 4;
                               end;
   b8out[i4,i2]:=bs+bs1;
   b8in[i4,i2]:=b8out[i4, i2];
 
  end;
 
       //<- Sbox перестановка
 
   //-> Pbox перестановка
      bs1:=0;
      for s1:=0 to 63 do
        begin
 
        nom:=pbox[s1] div 8;
        bs:=b8out[i4,nom];
        bs:=bs shl (pbox[s1] mod 8);
        bs:=bs shr 7;
        bs:=bs shl (7 - pbox[s1]);
 
        bs1:=bs1+bs;
        b8out[i4,s1 div 8]:=b8out[i4,s1 div 8]+bs1;
        end;
 
       //<--Pbox перестановка
 
 
   end;                  //сеть SP
 
 
 
   for i:=0 to (sizefile8 + 1) do
    for i1:=0 to 7 do OpenFl.write(b8out[i,i1],1);
 
OpenFl.Free;
CloseFl.Free;
 
 
end;
 
end.
угу, а утром ещё и на работу ехать, жуть
Ответить с цитированием
 


Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 02:53.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025