Крипто-форум crprogram.16mb.com

Програмування на Object Pascal, Lazarus, криптографія, криптоаналіз, шифри, вихідні коди, вирішення задач, приклади програм

Часовий пояс: UTC десь + 2 години




Розпочати нову тему Відповісти  [ 20 повідомлень ] 
Автор Повідомлення
 Заголовок повідомлення: AES
СообщениеДодано: 09 гру 2014, 20:48 
Не в мережі

Повідомлень: 23
AES, (Advanced Encryption Standard - Розширений стандарт шифрування) - сучасний симетричний блочний шифр (алгоритм шифрування), переможець конкурсу АЕС 2001 року.

Довжина блоку 128 біт,
довжина ключа 128/192/256 біт.

Розробили його бельгійські криптографи Joan Daemen та Vincent Rijmen під назвою Rijndael.


Повернутися наверх
  
 
 Заголовок повідомлення: Re: AES
СообщениеДодано: 09 гру 2014, 20:48 
Не в мережі

Повідомлень: 282
Для ключа
Код:
Ключ

та відкритого тексту
Код:
Текст

отримаємо результат роботи алгоритму AES
Код:
82B9496379B6C12A0EDAF2BAB11AF2F0


Повернутися наверх
  
 
 Заголовок повідомлення: Re: AES
СообщениеДодано: 09 гру 2014, 20:48 
Не в мережі

Повідомлень: 282
Раундові приклади:

Код:
|raund = 0
|після Вхідний текст.
|  $d2   $f2   $00   $00
|  $e5   $00   $00   $00
|  $ea   $00   $00   $00
|  $f1   $00   $00   $00

D2E5EAF1F20000000000000000000000
               


|raund = 1
|після xorRoundKey
|  $d2   $05   $00   $00
|  $2f   $00   $00   $00
|  $01   $00   $00   $00
|  $0f   $00   $00   $00

D22F010F050000000000000000000000
               


|raund = 1
|після subBytes
|  $b5   $6b   $63   $63
|  $15   $63   $63   $63
|  $7c   $63   $63   $63
|  $76   $63   $63   $63

B5157C766B6363636363636363636363
               


|raund = 1
|після shiftRows
|  $b5   $6b   $63   $63
|  $63   $63   $63   $15
|  $63   $63   $7c   $63
|  $63   $76   $63   $63

B56363636B63637663637C6363156363
               


|raund = 1
|після mixcolumns
|  $d4   $66   $7c   $f9
|  $b5   $7e   $42   $8f
|  $b5   $54   $5d   $15
|  $02   $51   $7c   $15

D4B5B502667E54517C425D7CF98F1515
               


|raund = 2
|після xorRoundKey
|  $b6   $f3   $e9   $6c
|  $1c   $d7   $eb   $26
|  $3d   $dc   $d5   $9d
|  $9f   $cc   $e1   $88

B61C3D9FF3D7DCCCE9EBD5E16C269D88
               


|raund = 2
|після subBytes
|  $4e   $0d   $1e   $50
|  $9c   $0e   $e9   $f7
|  $27   $86   $03   $5e
|  $db   $4b   $f8   $c4

4E9C27DB0D0E864B1EE903F850F75EC4
               


|raund = 2
|після shiftRows
|  $4e   $0d   $1e   $50
|  $0e   $e9   $f7   $9c
|  $03   $5e   $27   $86
|  $c4   $db   $4b   $f8

4E0E03C40DE95EDB1EF7274B509C86F8
               


|raund = 2
|після mixcolumns
|  $49   $bf   $52   $61
|  $93   $fd   $c9   $1a
|  $11   $2e   $7a   $c8
|  $4c   $0d   $64   $01

4993114CBFFD2E0D52C97A64611AC801
               


|raund = 3
|після xorRoundKey
|  $fa   $99   $e1   $47
|  $fe   $39   $a4   $de
|  $c7   $70   $ac   $96
|  $fb   $27   $d3   $2b

FAFEC7FB99397027E1A4ACD347DE962B
               


|raund = 3
|після subBytes
|  $2d   $ee   $f8   $a0
|  $bb   $12   $49   $1d
|  $c6   $51   $91   $90
|  $0f   $cc   $66   $f1

2DBBC60FEE1251CCF8499166A01D90F1
               


|raund = 3
|після shiftRows
|  $2d   $ee   $f8   $a0
|  $12   $49   $1d   $bb
|  $91   $90   $c6   $51
|  $f1   $0f   $cc   $66

2D1291F1EE49900FF81DC6CCA0BB5166
               


|raund = 3
|після mixcolumns
|  $0c   $83   $c6   $ba
|  $50   $d8   $5f   $58
|  $0e   $8d   $3d   $13
|  $0d   $ee   $4b   $dd

0C500E0D83D88DEEC65F3D4BBA5813DD
               


|raund = 4
|після xorRoundKey
|  $a7   $0e   $f8   $a2
|  $65   $29   $c3   $00
|  $3d   $e0   $86   $f6
|  $4d   $84   $96   $2a

A7653D4D0E29E084F8C38696A200F62A
               


|raund = 4
|після subBytes
|  $5c   $ab   $41   $3a
|  $4d   $a5   $2e   $63
|  $27   $e1   $44   $42
|  $e3   $5f   $90   $e5

5C4D27E3ABA5E15F412E44903A6342E5
               


|raund = 4
|після shiftRows
|  $5c   $ab   $41   $3a
|  $a5   $2e   $63   $4d
|  $44   $42   $27   $e1
|  $e5   $e3   $5f   $90

5CA544E5AB2E42E34163275F3A4DE190
               


|raund = 4
|після mixcolumns
|  $ed   $9e   $5f   $d2
|  $24   $d2   $b1   $08
|  $45   $3f   $8d   $05
|  $d4   $57   $39   $d9

ED2445D49ED23F575FB18D39D20805D9
               


|raund = 5
|після xorRoundKey
|  $24   $da   $25   $b0
|  $c8   $cf   $30   $d1
|  $1e   $09   $00   $6d
|  $39   $d0   $63   $74

24C81E39DACF09D025300063B0D16D74
               


|raund = 5
|після subBytes
|  $36   $57   $3f   $e7
|  $e8   $8a   $04   $3e
|  $72   $01   $63   $3c
|  $12   $70   $fb   $92

36E87212578A01703F0463FBE73E3C92
               


|raund = 5
|після shiftRows
|  $36   $57   $3f   $e7
|  $8a   $04   $3e   $e8
|  $63   $3c   $72   $01
|  $92   $12   $70   $fb

368A639257043C123F3E7270E7E801FB
               


|raund = 5
|після mixcolumns
|  $18   $8c   $3e   $0c
|  $0e   $09   $a5   $d4
|  $d7   $1d   $75   $1b
|  $8c   $e5   $ed   $36

180ED78C8C091DE53EA575ED0CD41B36
               


|raund = 6
|після xorRoundKey
|  $f4   $24   $ec   $bc
|  $a7   $bd   $90   $38
|  $19   $e5   $00   $06
|  $cb   $25   $77   $01

F4A719CB24BDE525EC900077BC380601
               


|raund = 6
|після subBytes
|  $bf   $36   $ce   $65
|  $5c   $7a   $60   $07
|  $d4   $d9   $63   $6f
|  $1f   $3f   $f5   $7c

BF5CD41F367AD93FCE6063F565076F7C
               


|raund = 6
|після shiftRows
|  $bf   $36   $ce   $65
|  $7a   $60   $07   $5c
|  $63   $6f   $d4   $d9
|  $7c   $1f   $3f   $f5

BF7A637C36606F1FCE07D43F655CD9F5
               


|raund = 6
|після mixcolumns
|  $f4   $bc   $65   $02
|  $92   $58   $98   $58
|  $87   $a9   $3b   $94
|  $3b   $6b   $e4   $db

F492873BBC58A96B65983BE4025894DB
               


|raund = 7
|після xorRoundKey
|  $f6   $16   $1d   $ca
|  $9f   $e1   $14   $38
|  $d3   $05   $e2   $50
|  $9b   $0b   $1e   $16

F69FD39B16E1050B1D14E21ECA385016
               


|raund = 7
|після subBytes
|  $42   $47   $a4   $74
|  $db   $f8   $fa   $07
|  $66   $6b   $98   $53
|  $14   $2b   $72   $47

42DB661447F86B2BA4FA987274075347
               


|raund = 7
|після shiftRows
|  $42   $47   $a4   $74
|  $f8   $fa   $07   $db
|  $98   $53   $66   $6b
|  $47   $14   $2b   $72

42F8984747FA5314A407662B74DB6B72
               


|raund = 7
|після mixcolumns
|  $48   $dc   $17   $87
|  $5d   $49   $2b   $16
|  $58   $27   $12   $ef
|  $28   $48   $c0   $c8

485D5828DC492748172B12C08716EFC8
               


|raund = 8
|після xorRoundKey
|  $da   $e4   $57   $0f
|  $4c   $e1   $0f   $52
|  $b1   $62   $8e   $b7
|  $60   $60   $12   $d7

DA4CB160E4E16260570F8E120F52B7D7
               


|raund = 8
|після subBytes
|  $57   $69   $5b   $76
|  $29   $f8   $76   $00
|  $c8   $aa   $19   $a9
|  $d0   $d0   $c9   $0e

5729C8D069F8AAD05B7619C97600A90E
               


|raund = 8
|після shiftRows
|  $57   $69   $5b   $76
|  $f8   $76   $00   $29
|  $19   $a9   $c8   $aa
|  $0e   $d0   $d0   $c9

57F8190E6976A9D05B00C8D07629AAC9
               


|raund = 8
|після mixcolumns
|  $aa   $31   $ae   $f4
|  $99   $b5   $c8   $08
|  $8f   $3d   $bb   $50
|  $04   $df   $9e   $90

AA998F0431B53DDFAEC8BB9EF4085090
               


|raund = 9
|після xorRoundKey
|  $a3   $00   $df   $0d
|  $e2   $66   $3f   $bb
|  $a6   $51   $4b   $f8
|  $88   $7b   $e8   $f9

A3E2A6880066517BDF3F4BE80DBBF8F9
               


|raund = 9
|після subBytes
|  $0a   $63   $9e   $d7
|  $98   $33   $75   $ea
|  $24   $d1   $b3   $41
|  $c4   $21   $9b   $99

0A9824C46333D1219E75B39BD7EA4199
               


|raund = 9
|після shiftRows
|  $0a   $63   $9e   $d7
|  $33   $75   $ea   $98
|  $b3   $41   $24   $d1
|  $99   $c4   $21   $9b

0A33B399637541C49EEA2421D798D19B
               


|raund = 9
|після mixcolumns
|  $6b   $dc   $07   $4c
|  $3b   $8e   $1c   $0f
|  $f4   $c3   $5f   $40
|  $b7   $02   $35   $06

6B3BF4B7DC8EC302071C5F354C0F4006
               


|raund = 10
|після xorRoundKey
|  $14   $92   $38   $8a
|  $82   $e4   $81   $21
|  $24   $7f   $13   $a4
|  $a2   $b3   $f2   $a8

148224A292E47FB3388113F28A21A4A8
               


|raund = 10
|після subBytes
|  $fa   $4f   $07   $7e
|  $13   $69   $0c   $fd
|  $36   $d2   $7d   $49
|  $3a   $6d   $89   $c2

FA13363A4F69D26D070C7D897EFD49C2
               


|raund = 10
|після shiftRows
|  $fa   $4f   $07   $7e
|  $69   $0c   $fd   $13
|  $7d   $49   $36   $d2
|  $c2   $3a   $6d   $89

FA697DC24F0C493A07FD366D7E13D289
               


|raund = 11
|після xorRoundKey
|  $82   $79   $0e   $b1
|  $b9   $b6   $da   $1a
|  $49   $c1   $f2   $f2
|  $63   $2a   $ba   $f0

82B9496379B6C12A0EDAF2BAB11AF2F0
               

82B9496379B6C12A0EDAF2BAB11AF2F0



Повернутися наверх
  
 
 Заголовок повідомлення: Re: AES
СообщениеДодано: 09 гру 2014, 20:48 
Не в мережі

Повідомлень: 282
Приклад розширення ключа
Код:
Розширення ключа:

| ключі раунда № = 1
|  $00   $f7   $00   $00
|  $ca   $00   $00   $00
|  $eb   $00   $00   $00
|  $fe   $00   $00   $00

00CAEBFEF70000000000000000000000
               


| ключі раунда № = 2
|  $62   $95   $95   $95
|  $a9   $a9   $a9   $a9
|  $88   $88   $88   $88
|  $9d   $9d   $9d   $9d

62A9889D95A9889D95A9889D95A9889D
               


| ключі раунда № = 3
|  $b3   $26   $b3   $26
|  $6d   $c4   $6d   $c4
|  $d6   $5e   $d6   $5e
|  $b7   $2a   $b7   $2a

B36DD6B726C45E2AB36DD6B726C45E2A
               


| ключі раунда № = 4
|  $ab   $8d   $3e   $18
|  $35   $f1   $9c   $58
|  $33   $6d   $bb   $e5
|  $40   $6a   $dd   $f7

AB3533408DF16D6A3E9CBBDD1858E5F7
               


| ключі раунда № = 5
|  $c9   $44   $7a   $62
|  $ec   $1d   $81   $d9
|  $5b   $36   $8d   $68
|  $ed   $87   $5a   $ad

C9EC5BED441D36877A818D5A62D968AD
               


| ключі раунда № = 6
|  $ec   $a8   $d2   $b0
|  $a9   $b4   $35   $ec
|  $ce   $f8   $75   $1d
|  $47   $c0   $9a   $37

ECA9CE47A8B4F8C0D235759AB0EC1D37
               


| ключі раунда № = 7
|  $02   $aa   $78   $c8
|  $0d   $b9   $8c   $60
|  $54   $ac   $d9   $c4
|  $a0   $60   $fa   $cd

020D54A0AAB9AC60788CD9FAC860C4CD
               


| ключі раунда № = 8
|  $92   $38   $40   $88
|  $11   $a8   $24   $44
|  $e9   $45   $9c   $58
|  $48   $28   $d2   $1f

9211E94838A8452840249CD28844581F
               


| ключі раунда № = 9
|  $09   $31   $71   $f9
|  $7b   $d3   $f7   $b3
|  $29   $6c   $f0   $a8
|  $8c   $a4   $76   $69

097B298C31D36CA471F7F076F9B3A869
               


| ключі раунда № = 10
|  $7f   $4e   $3f   $c6
|  $b9   $6a   $9d   $2e
|  $d0   $bc   $4c   $e4
|  $15   $b1   $c7   $ae

7FB9D0154E6ABCB13F9D4CC7C62EE4AE
               


| ключі раунда № = 11
|  $78   $36   $09   $cf
|  $d0   $ba   $27   $09
|  $34   $88   $c4   $20
|  $a1   $10   $d7   $79

78D034A136BA88100927C4D7CF092079


Повернутися наверх
  
 
 Заголовок повідомлення: Re: AES
СообщениеДодано: 09 гру 2014, 20:48 
Не в мережі

Повідомлень: 502
Схема AES:

Зображення


Повернутися наверх
  
 
 Заголовок повідомлення: Re: AES
СообщениеДодано: 09 гру 2014, 20:48 
Не в мережі

Повідомлень: 502
Для ключа та відкритого тексту (HEX):
Код:
00000000000000000000000000000000

шифротекст (HEX):
Код:
66E94BD4EF8A2C3B884CFA59CA342B2E


Повернутися наверх
  
 
 Заголовок повідомлення: Re: AES
СообщениеДодано: 09 гру 2014, 20:48 
Не в мережі

Повідомлень: 282
Реалізуємо шифр AES на делфі:

(реалізація не моя, а німецького програміста ~2006 року, дещо перероблена та доповнена).

Для кнопки напишемо код
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
i,j:integer;
txt,pass,rez,tm:string;
ctxt:array[0..16] of byte;
ix,jx:byte;
begin

//input pass
pass:=edit1.text;
j:=1;
for i:=1 to 16 do
begin
  tm:=pass[j]+pass[j+1];
  initialKey[i-1]:=hextoint(tm);
  j:=j+2;
end;

//input text
txt:=edit2.text;
j:=1;
for i:=1 to 16 do
begin
  tm:=txt[j]+txt[j+1];
  ctxt[i]:=hextoint(tm);
  j:=j+2;
end;

for ix:=0 to 15 do
state[(ix div 4), (ix mod 4)]:=ctxt[ix+1];

//crypt or decrypt
if radiogroup1.ItemIndex=0 then
aescrypt()
else
aesdecrypt();

for ix:=0 to 15 do
ctxt[ix+1]:=state[(ix div 4), (ix mod 4)];

//result
rez:='';
for i:=1 to 16 do
rez:=rez+inttohex(ctxt[i],2);
memo1.Lines.Add(rez);

end;


edit1.text - вводимо пароль у НЕХ вигляді.
txt:=edit2.text; - 1-н блок тексту.
ctxt[i] - таблиця з результатом. ( 16 чисел 0..255), яку переводимо у НЕХ код.

Відповідно процедури шифрування/дешифрування AES
Код:
if radiogroup1.ItemIndex=0 then
aescrypt()       - шифрування
else
aesdecrypt(); - розшифрування



Повернутися наверх
  
 
 Заголовок повідомлення: Re: AES
СообщениеДодано: 09 гру 2014, 20:48 
Не в мережі

Повідомлень: 282
Вікно програми матиме вигляд:
Зображення


Повернутися наверх
  
 
 Заголовок повідомлення: Re: AES
СообщениеДодано: 09 гру 2014, 20:48 
Не в мережі

Повідомлень: 282
Процедура шифрування:
Код:
procedure aescrypt();
var
ii:byte;
begin

keyCounter:=0;
keyExpansion128(initialKey) ;

xorRoundKey();

for ii:=1 to 9 do
begin
//r1-r9 - раунди від 1 до 9-го
subBytes();
shiftRows();
mixcolumns();
xorRoundKey();
end;

//r10
subBytes();
shiftRows();
{}
xorRoundKey();

end;



де
subBytes(); - підстановка за допомогою S-блоку.
shiftRows(); - зміщення байт.
mixcolumns(); - перестановка біт у полі Галуа.
xorRoundKey(); - XOR раундового ключа.


Повернутися наверх
  
 
 Заголовок повідомлення: Re: AES
СообщениеДодано: 09 гру 2014, 20:48 
Не в мережі

Повідомлень: 282
Процедури матимуть вигляд
Код:
function FFMul(const a, b: byte): byte;
begin
  if ((a <> 0) and (b <> 0)) then
    Result := FFPow[FFlog[a] + FFlog[b]]
  else
    Result := 0;
end;

procedure mixcolumns();
var
  ii,jj:byte;
  t: array[0..3, 0..3] of byte;
begin
  for ii:=0 to 3 do
  for jj:=0 to 3 do
  t[ii, jj] := state[ii, jj];

  state[0, 0] := FFMul(a, t[0, 0]) xor FFMul(b, t[0, 1]) xor t[0, 2] xor t[0, 3];
  state[0, 1] := FFMul(a, t[0, 1]) xor FFMul(b, t[0, 2]) xor t[0, 3] xor t[0, 0];
  state[0, 2] := FFMul(a, t[0, 2]) xor FFMul(b, t[0, 3]) xor t[0, 0] xor t[0, 1];
  state[0, 3] := FFMul(a, t[0, 3]) xor FFMul(b, t[0, 0]) xor t[0, 1] xor t[0, 2];

  state[1, 0] := FFMul(a, t[1, 0]) xor FFMul(b, t[1, 1]) xor t[1, 2] xor t[1, 3];
  state[1, 1] := FFMul(a, t[1, 1]) xor FFMul(b, t[1, 2]) xor t[1, 3] xor t[1, 0];
  state[1, 2] := FFMul(a, t[1, 2]) xor FFMul(b, t[1, 3]) xor t[1, 0] xor t[1, 1];
  state[1, 3] := FFMul(a, t[1, 3]) xor FFMul(b, t[1, 0]) xor t[1, 1] xor t[1, 2];

  state[2, 0] := FFMul(a, t[2, 0]) xor FFMul(b, t[2, 1]) xor t[2, 2] xor t[2, 3];
  state[2, 1] := FFMul(a, t[2, 1]) xor FFMul(b, t[2, 2]) xor t[2, 3] xor t[2, 0];
  state[2, 2] := FFMul(a, t[2, 2]) xor FFMul(b, t[2, 3]) xor t[2, 0] xor t[2, 1];
  state[2, 3] := FFMul(a, t[2, 3]) xor FFMul(b, t[2, 0]) xor t[2, 1] xor t[2, 2];

  state[3, 0] := FFMul(a, t[3, 0]) xor FFMul(b, t[3, 1]) xor t[3, 2] xor t[3, 3];
  state[3, 1] := FFMul(a, t[3, 1]) xor FFMul(b, t[3, 2]) xor t[3, 3] xor t[3, 0];
  state[3, 2] := FFMul(a, t[3, 2]) xor FFMul(b, t[3, 3]) xor t[3, 0] xor t[3, 1];
  state[3, 3] := FFMul(a, t[3, 3]) xor FFMul(b, t[3, 0]) xor t[3, 1] xor t[3, 2];

end;


procedure subBytes();
var
  ii,jj:byte;
begin
  for ii:=0 to 3 do
  for jj:=0 to 3 do
  state[ii, jj] := sBox[state[ii, jj]];
end;

procedure shiftRows();
var
  temp1: byte;
  temp2: byte;
begin
  temp1 := state[0, 1];
  state[0, 1] := state[1, 1];
  state[1, 1] := state[2, 1];
  state[2, 1] := state[3, 1];
  state[3, 1] := temp1;
  temp1 := state[0, 2];
  temp2 := state[1, 2];
  state[0, 2] := state[2, 2];
  state[1, 2] := state[3, 2];
  state[2, 2] := temp1;
  state[3, 2] := temp2;
  temp1 := state[0, 3];
  state[0, 3] := state[3, 3];
  state[3, 3] := state[2, 3];
  state[2, 3] := state[1, 3];
  state[1, 3] := temp1;
end;



procedure getRCon(i: integer; out fo_word: array of byte);
var i1: integer;
begin
  for i1 := 1 to 3 do
    fo_word[i1] := $00;
  if i < 9 then begin
    fo_word[0] := $01 shl (i - 1);
    exit;
  end;
  if i = 9 then begin
    fo_word[0] := $1B;
    exit;
  end;
  fo_word[0] := $36;
end;

procedure subWord(f_in: array of byte; out f_out: array of byte);
var i: integer;
begin
  for i := 0 to 3 do
    f_out[i] := sBox[f_in[i]];
end;

procedure xorWord(a, b: array of byte; out f_out: array of byte);
var i: integer;
begin
  for i := 0 to sizeof(a) - 1 do
    f_out[i] := a[i] xor b[i];
end;

procedure setWord(a, b, c, d: byte; out fo_word: array of byte);
begin
  fo_word[0] := a;
  fo_word[1] := b;
  fo_word[2] := c;
  fo_word[3] := d;
end;

procedure rotWord(f_in: array of byte; out f_out: array of byte);
begin
  f_out[0] := f_in[1];
  f_out[1] := f_in[2];
  f_out[2] := f_in[3];
  f_out[3] := f_in[0];
end;


procedure keyExpansion128(initialKey: array of byte);
var
  i, j: integer;
  temp: array[0..3] of byte;
  temp2: array[0..3] of byte;
  temp3: array[0..3] of byte;
  temp4: array[0..3] of byte;
begin
  for i := 0 to 3 do
    for j := 0 to 3 do
      keyshedule128[i, j] := initialKey[4 * i + j];
  for i := 4 to 43 do begin
    for j := 0 to 3 do
      temp[j] := keyshedule128[i - 1, j];
    if i mod 4 = 0 then begin
      rotWord(temp, temp);
      subWord(temp, temp);
      getRCon(trunc(i / 4), temp2);
      xorWord(temp, temp2, temp);
    end;
    for j := 0 to 3 do
      temp3[j] := keyshedule128[i - 4, j];
    xorWord(temp3, temp, temp4);
    for j := 0 to 3 do
      keyshedule128[i, j] := temp4[j];
  end;
end;

procedure xorRoundKey();
var
  key: array[0..3] of byte ;
begin
  key[0] := keyshedule128[keyCounter, 0];
  key[1] := keyshedule128[keyCounter, 1];
  key[2] := keyshedule128[keyCounter, 2];
  key[3] := keyshedule128[keyCounter, 3];
  inc(keyCounter);
  state[0, 0] := state[0, 0] xor key[0];
  state[0, 1] := state[0, 1] xor key[1];
  state[0, 2] := state[0, 2] xor key[2];
  state[0, 3] := state[0, 3] xor key[3];
  key[0] := keyshedule128[keyCounter, 0];
  key[1] := keyshedule128[keyCounter, 1];
  key[2] := keyshedule128[keyCounter, 2];
  key[3] := keyshedule128[keyCounter, 3];
  inc(keyCounter);
  state[1, 0] := state[1, 0] xor key[0];
  state[1, 1] := state[1, 1] xor key[1];
  state[1, 2] := state[1, 2] xor key[2];
  state[1, 3] := state[1, 3] xor key[3];
  key[0] := keyshedule128[keyCounter, 0];
  key[1] := keyshedule128[keyCounter, 1];
  key[2] := keyshedule128[keyCounter, 2];
  key[3] := keyshedule128[keyCounter, 3];
  inc(keyCounter);
  state[2, 0] := state[2, 0] xor key[0];
  state[2, 1] := state[2, 1] xor key[1];
  state[2, 2] := state[2, 2] xor key[2];
  state[2, 3] := state[2, 3] xor key[3];
  key[0] := keyshedule128[keyCounter, 0];
  key[1] := keyshedule128[keyCounter, 1];
  key[2] := keyshedule128[keyCounter, 2];
  key[3] := keyshedule128[keyCounter, 3];
  inc(keyCounter);
  state[3, 0] := state[3, 0] xor key[0];
  state[3, 1] := state[3, 1] xor key[1];
  state[3, 2] := state[3, 2] xor key[2];
  state[3, 3] := state[3, 3] xor key[3];
end;



Повернутися наверх
  
 
 Заголовок повідомлення: Re: AES
СообщениеДодано: 09 гру 2014, 20:48 
Не в мережі

Повідомлень: 282
Для розшифровки:
Код:
procedure invMixColumns();
var
  ii,jj:byte;
  t: array[0..3, 0..3] of byte;
begin
  for ii:=0 to 3 do
  for jj:=0 to 3 do
  t[ii, jj] := state[ii, jj];

  state[0, 0] := FFMul(c, t[0, 0]) xor FFMul(d, t[0, 1]) xor FFMul(e, t[0, 2]) xor FFMul(f, t[0, 3]);
  state[0, 1] := FFMul(c, t[0, 1]) xor FFMul(d, t[0, 2]) xor FFMul(e, t[0, 3]) xor FFMul(f, t[0, 0]);
  state[0, 2] := FFMul(c, t[0, 2]) xor FFMul(d, t[0, 3]) xor FFMul(e, t[0, 0]) xor FFMul(f, t[0, 1]);
  state[0, 3] := FFMul(c, t[0, 3]) xor FFMul(d, t[0, 0]) xor FFMul(e, t[0, 1]) xor FFMul(f, t[0, 2]);

  state[1, 0] := FFMul(c, t[1, 0]) xor FFMul(d, t[1, 1]) xor FFMul(e, t[1, 2]) xor FFMul(f, t[1, 3]);
  state[1, 1] := FFMul(c, t[1, 1]) xor FFMul(d, t[1, 2]) xor FFMul(e, t[1, 3]) xor FFMul(f, t[1, 0]);
  state[1, 2] := FFMul(c, t[1, 2]) xor FFMul(d, t[1, 3]) xor FFMul(e, t[1, 0]) xor FFMul(f, t[1, 1]);
  state[1, 3] := FFMul(c, t[1, 3]) xor FFMul(d, t[1, 0]) xor FFMul(e, t[1, 1]) xor FFMul(f, t[1, 2]);

  state[2, 0] := FFMul(c, t[2, 0]) xor FFMul(d, t[2, 1]) xor FFMul(e, t[2, 2]) xor FFMul(f, t[2, 3]);
  state[2, 1] := FFMul(c, t[2, 1]) xor FFMul(d, t[2, 2]) xor FFMul(e, t[2, 3]) xor FFMul(f, t[2, 0]);
  state[2, 2] := FFMul(c, t[2, 2]) xor FFMul(d, t[2, 3]) xor FFMul(e, t[2, 0]) xor FFMul(f, t[2, 1]);
  state[2, 3] := FFMul(c, t[2, 3]) xor FFMul(d, t[2, 0]) xor FFMul(e, t[2, 1]) xor FFMul(f, t[2, 2]);

  state[3, 0] := FFMul(c, t[3, 0]) xor FFMul(d, t[3, 1]) xor FFMul(e, t[3, 2]) xor FFMul(f, t[3, 3]);
  state[3, 1] := FFMul(c, t[3, 1]) xor FFMul(d, t[3, 2]) xor FFMul(e, t[3, 3]) xor FFMul(f, t[3, 0]);
  state[3, 2] := FFMul(c, t[3, 2]) xor FFMul(d, t[3, 3]) xor FFMul(e, t[3, 0]) xor FFMul(f, t[3, 1]);
  state[3, 3] := FFMul(c, t[3, 3]) xor FFMul(d, t[3, 0]) xor FFMul(e, t[3, 1]) xor FFMul(f, t[3, 2]);

end;

procedure invsubBytes();
var
  ii,jj:byte;
begin
  for ii:=0 to 3 do
  for jj:=0 to 3 do
  state[ii, jj] := sBoxinv[state[ii, jj]];
end;

procedure invshiftRows();
var
  temp1: byte;
  temp2: byte;
begin
  temp1 := state[0, 1];
  temp2 := state[2, 1];
  state[0, 1] := state[3, 1];
  state[2, 1] := state[1, 1];
  state[1, 1] := temp1;
  state[3, 1] := temp2;
  temp1 := state[3, 2];
  temp2 := state[0, 2];
  state[0, 2] := state[2, 2];
  state[3, 2] := state[1, 2];
  state[1, 2] := temp1;
  state[2, 2] := temp2;
  temp1 := state[0, 3];
  state[0, 3] := state[1, 3];
  state[1, 3] := state[2, 3];
  state[2, 3] := state[3, 3];
  state[3, 3] := temp1;
end;


procedure aesdecrypt();
var
ii:byte;
begin

keyExpansion128(initialKey) ;

  keyCounter := 40;

  //r10
  xorRoundKey;
  {}
  invsubBytes;
  invshiftRows;
  keyCounter := keyCounter - 8;

  for ii:=1 to 9 do
begin
  //r9r-r1
  xorRoundKey;
  invmixcolumns;
  invsubBytes;
  invshiftRows;
  keyCounter := keyCounter - 8;
end;

  keyCounter := 0;
  xorRoundKey;

end;


Повернутися наверх
  
 
 Заголовок повідомлення: Re: AES
СообщениеДодано: 09 гру 2014, 20:48 
Не в мережі

Повідомлень: 282
Програмну реалізацію "шифр AES" скачати (завантажити) можна тут:

Приєднання файлів:
AES.rar [172.01 KiB]
Скачали: 145

MD5 (AES.rar) = "440622ACD0A5C500A5C6475D63142EF7"
SHA-1 (AES.rar) = "24266F0B6C6E1AFA3B75E33B9ED830CC1396F66B"


інструкція:
1. Клацаємо на файлі і зберігаємо у будь-яке зручне місце на вашому комп'ютері.
(2. Перевіряємо архів на віруси. - За бажанням.)
3. Розпаковуємо вміст архіву.
4. Клацаємо на програмі.
5. Вводимо ключ та відкритий текст.
6. Отримуємо шифр текст.

Якщо потрібні додаткова інформація чи реалізація - повідомте нас - і ми спробуємо вам допомогти


Повернутися наверх
  
 
 Заголовок повідомлення: Re: AES
СообщениеДодано: 09 гру 2014, 20:48 
Не в мережі

Повідомлень: 282
Змінні та таблиці
Код:
const
  HexValues='0123456789ABCDEF';
  sBox: array[0..255] of byte = (
    $63, $7C, $77, $7B, $F2, $6B, $6F, $C5, $30, $01, $67, $2B, $FE, $D7, $AB, $76,
    $CA, $82, $C9, $7D, $FA, $59, $47, $F0, $AD, $D4, $A2, $AF, $9C, $A4, $72, $C0,
    $B7, $FD, $93, $26, $36, $3F, $F7, $CC, $34, $A5, $E5, $F1, $71, $D8, $31, $15,
    $04, $C7, $23, $C3, $18, $96, $05, $9A, $07, $12, $80, $E2, $EB, $27, $B2, $75,
    $09, $83, $2C, $1A, $1B, $6E, $5A, $A0, $52, $3B, $D6, $B3, $29, $E3, $2F, $84,
    $53, $D1, $00, $ED, $20, $FC, $B1, $5B, $6A, $CB, $BE, $39, $4A, $4C, $58, $CF,
    $D0, $EF, $AA, $FB, $43, $4D, $33, $85, $45, $F9, $02, $7F, $50, $3C, $9F, $A8,
    $51, $A3, $40, $8F, $92, $9D, $38, $F5, $BC, $B6, $DA, $21, $10, $FF, $F3, $D2,
    $CD, $0C, $13, $EC, $5F, $97, $44, $17, $C4, $A7, $7E, $3D, $64, $5D, $19, $73,
    $60, $81, $4F, $DC, $22, $2A, $90, $88, $46, $EE, $B8, $14, $DE, $5E, $0B, $DB,
    $E0, $32, $3A, $0A, $49, $06, $24, $5C, $C2, $D3, $AC, $62, $91, $95, $E4, $79,
    $E7, $C8, $37, $6D, $8D, $D5, $4E, $A9, $6C, $56, $F4, $EA, $65, $7A, $AE, $08,
    $BA, $78, $25, $2E, $1C, $A6, $B4, $C6, $E8, $DD, $74, $1F, $4B, $BD, $8B, $8A,
    $70, $3E, $B5, $66, $48, $03, $F6, $0E, $61, $35, $57, $B9, $86, $C1, $1D, $9E,
    $E1, $F8, $98, $11, $69, $D9, $8E, $94, $9B, $1E, $87, $E9, $CE, $55, $28, $DF,
    $8C, $A1, $89, $0D, $BF, $E6, $42, $68, $41, $99, $2D, $0F, $B0, $54, $BB, $16);

  sBoxInv: array[0..255] of byte = (
    $52, $09, $6A, $D5, $30, $36, $A5, $38, $BF, $40, $A3, $9E, $81, $F3, $D7, $FB,
    $7C, $E3, $39, $82, $9B, $2F, $FF, $87, $34, $8E, $43, $44, $C4, $DE, $E9, $CB,
    $54, $7B, $94, $32, $A6, $C2, $23, $3D, $EE, $4C, $95, $0B, $42, $FA, $C3, $4E,
    $08, $2E, $A1, $66, $28, $D9, $24, $B2, $76, $5B, $A2, $49, $6D, $8B, $D1, $25,
    $72, $F8, $F6, $64, $86, $68, $98, $16, $D4, $A4, $5C, $CC, $5D, $65, $B6, $92,
    $6C, $70, $48, $50, $FD, $ED, $B9, $DA, $5E, $15, $46, $57, $A7, $8D, $9D, $84,
    $90, $D8, $AB, $00, $8C, $BC, $D3, $0A, $F7, $E4, $58, $05, $B8, $B3, $45, $06,
    $D0, $2C, $1E, $8F, $CA, $3F, $0F, $02, $C1, $AF, $BD, $03, $01, $13, $8A, $6B,
    $3A, $91, $11, $41, $4F, $67, $DC, $EA, $97, $F2, $CF, $CE, $F0, $B4, $E6, $73,
    $96, $AC, $74, $22, $E7, $AD, $35, $85, $E2, $F9, $37, $E8, $1C, $75, $DF, $6E,
    $47, $F1, $1A, $71, $1D, $29, $C5, $89, $6F, $B7, $62, $0E, $AA, $18, $BE, $1B,
    $FC, $56, $3E, $4B, $C6, $D2, $79, $20, $9A, $DB, $C0, $FE, $78, $CD, $5A, $F4,
    $1F, $DD, $A8, $33, $88, $07, $C7, $31, $B1, $12, $10, $59, $27, $80, $EC, $5F,
    $60, $51, $7F, $A9, $19, $B5, $4A, $0D, $2D, $E5, $7A, $9F, $93, $C9, $9C, $EF,
    $A0, $E0, $3B, $4D, $AE, $2A, $F5, $B0, $C8, $EB, $BB, $3C, $83, $53, $99, $61,
    $17, $2B, $04, $7E, $BA, $77, $D6, $26, $E1, $69, $14, $63, $55, $21, $0C, $7D);

  FFlog: array[0..255] of byte = (
    $00, $00, $19, $01, $32, $02, $1A, $C6, $4B, $C7, $1B, $68, $33, $EE, $DF, $03,
    $64, $04, $E0, $0E, $34, $8D, $81, $EF, $4C, $71, $08, $C8, $F8, $69, $1C, $C1,
    $7D, $C2, $1D, $B5, $F9, $B9, $27, $6A, $4D, $E4, $A6, $72, $9A, $C9, $09, $78,
    $65, $2F, $8A, $05, $21, $0F, $E1, $24, $12, $F0, $82, $45, $35, $93, $DA, $8E,
    $96, $8F, $DB, $BD, $36, $D0, $CE, $94, $13, $5C, $D2, $F1, $40, $46, $83, $38,
    $66, $DD, $FD, $30, $BF, $06, $8B, $62, $B3, $25, $E2, $98, $22, $88, $91, $10,
    $7E, $6E, $48, $C3, $A3, $B6, $1E, $42, $3A, $6B, $28, $54, $FA, $85, $3D, $BA,
    $2B, $79, $0A, $15, $9B, $9F, $5E, $CA, $4E, $D4, $AC, $E5, $F3, $73, $A7, $57,
    $AF, $58, $A8, $50, $F4, $EA, $D6, $74, $4F, $AE, $E9, $D5, $E7, $E6, $AD, $E8,
    $2C, $D7, $75, $7A, $EB, $16, $0B, $F5, $59, $CB, $5F, $B0, $9C, $A9, $51, $A0,
    $7F, $0C, $F6, $6F, $17, $C4, $49, $EC, $D8, $43, $1F, $2D, $A4, $76, $7B, $B7,
    $CC, $BB, $3E, $5A, $FB, $60, $B1, $86, $3B, $52, $A1, $6C, $AA, $55, $29, $9D,
    $97, $B2, $87, $90, $61, $BE, $DC, $FC, $BC, $95, $CF, $CD, $37, $3F, $5B, $D1,
    $53, $39, $84, $3C, $41, $A2, $6D, $47, $14, $2A, $9E, $5D, $56, $F2, $D3, $AB,
    $44, $11, $92, $D9, $23, $20, $2E, $89, $B4, $7C, $B8, $26, $77, $99, $E3, $A5,
    $67, $4A, $ED, $DE, $C5, $31, $FE, $18, $0D, $63, $8C, $80, $C0, $F7, $70, $07);

  FFpow: array[0..509] of byte = (
    $01, $03, $05, $0F, $11, $33, $55, $FF, $1A, $2E, $72, $96, $A1, $F8, $13, $35,
    $5F, $E1, $38, $48, $D8, $73, $95, $A4, $F7, $02, $06, $0A, $1E, $22, $66, $AA,
    $E5, $34, $5C, $E4, $37, $59, $EB, $26, $6A, $BE, $D9, $70, $90, $AB, $E6, $31,
    $53, $F5, $04, $0C, $14, $3C, $44, $CC, $4F, $D1, $68, $B8, $D3, $6E, $B2, $CD,
    $4C, $D4, $67, $A9, $E0, $3B, $4D, $D7, $62, $A6, $F1, $08, $18, $28, $78, $88,
    $83, $9E, $B9, $D0, $6B, $BD, $DC, $7F, $81, $98, $B3, $CE, $49, $DB, $76, $9A,
    $B5, $C4, $57, $F9, $10, $30, $50, $F0, $0B, $1D, $27, $69, $BB, $D6, $61, $A3,
    $FE, $19, $2B, $7D, $87, $92, $AD, $EC, $2F, $71, $93, $AE, $E9, $20, $60, $A0,
    $FB, $16, $3A, $4E, $D2, $6D, $B7, $C2, $5D, $E7, $32, $56, $FA, $15, $3F, $41,
    $C3, $5E, $E2, $3D, $47, $C9, $40, $C0, $5B, $ED, $2C, $74, $9C, $BF, $DA, $75,
    $9F, $BA, $D5, $64, $AC, $EF, $2A, $7E, $82, $9D, $BC, $DF, $7A, $8E, $89, $80,
    $9B, $B6, $C1, $58, $E8, $23, $65, $AF, $EA, $25, $6F, $B1, $C8, $43, $C5, $54,
    $FC, $1F, $21, $63, $A5, $F4, $07, $09, $1B, $2D, $77, $99, $B0, $CB, $46, $CA,
    $45, $CF, $4A, $DE, $79, $8B, $86, $91, $A8, $E3, $3E, $42, $C6, $51, $F3, $0E,
    $12, $36, $5A, $EE, $29, $7B, $8D, $8C, $8F, $8A, $85, $94, $A7, $F2, $0D, $17,
    $39, $4B, $DD, $7C, $84, $97, $A2, $FD, $1C, $24, $6C, $B4, $C7, $52, $F6,
    $01, $03, $05, $0F, $11, $33, $55, $FF, $1A, $2E, $72, $96, $A1, $F8, $13, $35,
    $5F, $E1, $38, $48, $D8, $73, $95, $A4, $F7, $02, $06, $0A, $1E, $22, $66, $AA,
    $E5, $34, $5C, $E4, $37, $59, $EB, $26, $6A, $BE, $D9, $70, $90, $AB, $E6, $31,
    $53, $F5, $04, $0C, $14, $3C, $44, $CC, $4F, $D1, $68, $B8, $D3, $6E, $B2, $CD,
    $4C, $D4, $67, $A9, $E0, $3B, $4D, $D7, $62, $A6, $F1, $08, $18, $28, $78, $88,
    $83, $9E, $B9, $D0, $6B, $BD, $DC, $7F, $81, $98, $B3, $CE, $49, $DB, $76, $9A,
    $B5, $C4, $57, $F9, $10, $30, $50, $F0, $0B, $1D, $27, $69, $BB, $D6, $61, $A3,
    $FE, $19, $2B, $7D, $87, $92, $AD, $EC, $2F, $71, $93, $AE, $E9, $20, $60, $A0,
    $FB, $16, $3A, $4E, $D2, $6D, $B7, $C2, $5D, $E7, $32, $56, $FA, $15, $3F, $41,
    $C3, $5E, $E2, $3D, $47, $C9, $40, $C0, $5B, $ED, $2C, $74, $9C, $BF, $DA, $75,
    $9F, $BA, $D5, $64, $AC, $EF, $2A, $7E, $82, $9D, $BC, $DF, $7A, $8E, $89, $80,
    $9B, $B6, $C1, $58, $E8, $23, $65, $AF, $EA, $25, $6F, $B1, $C8, $43, $C5, $54,
    $FC, $1F, $21, $63, $A5, $F4, $07, $09, $1B, $2D, $77, $99, $B0, $CB, $46, $CA,
    $45, $CF, $4A, $DE, $79, $8B, $86, $91, $A8, $E3, $3E, $42, $C6, $51, $F3, $0E,
    $12, $36, $5A, $EE, $29, $7B, $8D, $8C, $8F, $8A, $85, $94, $A7, $F2, $0D, $17,
    $39, $4B, $DD, $7C, $84, $97, $A2, $FD, $1C, $24, $6C, $B4, $C7, $52, $F6);

  a = $02;
  b = $03;
  c = $0E;
  d = $0B;
  e = $0D;
  f = $09;
 
var
  Form1: TForm1;
  keyshedule128: array[0..43, 0..3] of byte;
  initialKey: array[0..15] of byte;
  byteCounter: integer;
  keyCounter: integer;
  key,rez:string;
  state: array[0..3, 0..3] of byte;
  bul:integer;


Повернутися наверх
  
 
 Заголовок повідомлення: Re: AES
СообщениеДодано: 09 гру 2014, 20:48 
Не в мережі

Повідомлень: 282
Може буде корисним
для ключа 000...00 та шифротексту 000...00
результат
Код:
66E94BD4EF8A2C3B884CFA59CA342B2E


Повернутися наверх
  
 
 Заголовок повідомлення: Re: AES
СообщениеДодано: 09 гру 2014, 20:48 
Не в мережі

Повідомлень: 17
Можете завантажити весь файл у форматі .PAS ?


Повернутися наверх
  
 
 Заголовок повідомлення: Re: AES
СообщениеДодано: 09 гру 2014, 20:48 
Не в мережі

Повідомлень: 282
Там потрібен не файл pas, а юніт:
створюєте новий проект в делфі і копіюєте код з повідомлень починаючи з
post891.html#p891


Повернутися наверх
  
 
 Заголовок повідомлення: Re: AES
СообщениеДодано: 09 гру 2014, 20:48 
Не в мережі

Повідомлень: 17
Намагався ось що видає компілятор.


Вкладення:
Project1 - Delphi XE4 - AES.rar [81.89 KiB]
Скачали: 117
Повернутися наверх
  
 
 Заголовок повідомлення: Re: AES
СообщениеДодано: 09 гру 2014, 20:48 
Не в мережі

Повідомлень: 17
Якщо потрібно можу скинути файл юніта.


Повернутися наверх
  
 
 Заголовок повідомлення: Re: AES
СообщениеДодано: 09 гру 2014, 20:48 
Не в мережі

Повідомлень: 282
початок
Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls;

type
  TForm1 = class(TForm)
    Memo1: TMemo;
    Edit1: TEdit;
    Edit2: TEdit;
    Label1: TLabel;
    Label2: TLabel;
    RadioGroup1: TRadioGroup;
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
const
  HexValues='0123456789ABCDEF';
  sBox: array[0..255] of byte = (
    $63, $7C, $77, $7B, $F2, $6B, $6F, $C5, $30, $01, $67, $2B, $FE, $D7, $AB, $76,
    $CA, $82, $C9, $7D, $FA, $59, $47, $F0, $AD, $D4, $A2, $AF, $9C, $A4, $72, $C0,
    $B7, $FD, $93, $26, $36, $3F, $F7, $CC, $34, $A5, $E5, $F1, $71, $D8, $31, $15,
    $04, $C7, $23, $C3, $18, $96, $05, $9A, $07, $12, $80, $E2, $EB, $27, $B2, $75,
    $09, $83, $2C, $1A, $1B, $6E, $5A, $A0, $52, $3B, $D6, $B3, $29, $E3, $2F, $84,
    $53, $D1, $00, $ED, $20, $FC, $B1, $5B, $6A, $CB, $BE, $39, $4A, $4C, $58, $CF,
    $D0, $EF, $AA, $FB, $43, $4D, $33, $85, $45, $F9, $02, $7F, $50, $3C, $9F, $A8,
    $51, $A3, $40, $8F, $92, $9D, $38, $F5, $BC, $B6, $DA, $21, $10, $FF, $F3, $D2,
    $CD, $0C, $13, $EC, $5F, $97, $44, $17, $C4, $A7, $7E, $3D, $64, $5D, $19, $73,
    $60, $81, $4F, $DC, $22, $2A, $90, $88, $46, $EE, $B8, $14, $DE, $5E, $0B, $DB,
    $E0, $32, $3A, $0A, $49, $06, $24, $5C, $C2, $D3, $AC, $62, $91, $95, $E4, $79,
    $E7, $C8, $37, $6D, $8D, $D5, $4E, $A9, $6C, $56, $F4, $EA, $65, $7A, $AE, $08,
    $BA, $78, $25, $2E, $1C, $A6, $B4, $C6, $E8, $DD, $74, $1F, $4B, $BD, $8B, $8A,
    $70, $3E, $B5, $66, $48, $03, $F6, $0E, $61, $35, $57, $B9, $86, $C1, $1D, $9E,
    $E1, $F8, $98, $11, $69, $D9, $8E, $94, $9B, $1E, $87, $E9, $CE, $55, $28, $DF,
    $8C, $A1, $89, $0D, $BF, $E6, $42, $68, $41, $99, $2D, $0F, $B0, $54, $BB, $16);

  sBoxInv: array[0..255] of byte = (
    $52, $09, $6A, $D5, $30, $36, $A5, $38, $BF, $40, $A3, $9E, $81, $F3, $D7, $FB,
    $7C, $E3, $39, $82, $9B, $2F, $FF, $87, $34, $8E, $43, $44, $C4, $DE, $E9, $CB,
    $54, $7B, $94, $32, $A6, $C2, $23, $3D, $EE, $4C, $95, $0B, $42, $FA, $C3, $4E,
    $08, $2E, $A1, $66, $28, $D9, $24, $B2, $76, $5B, $A2, $49, $6D, $8B, $D1, $25,
    $72, $F8, $F6, $64, $86, $68, $98, $16, $D4, $A4, $5C, $CC, $5D, $65, $B6, $92,
    $6C, $70, $48, $50, $FD, $ED, $B9, $DA, $5E, $15, $46, $57, $A7, $8D, $9D, $84,
    $90, $D8, $AB, $00, $8C, $BC, $D3, $0A, $F7, $E4, $58, $05, $B8, $B3, $45, $06,
    $D0, $2C, $1E, $8F, $CA, $3F, $0F, $02, $C1, $AF, $BD, $03, $01, $13, $8A, $6B,
    $3A, $91, $11, $41, $4F, $67, $DC, $EA, $97, $F2, $CF, $CE, $F0, $B4, $E6, $73,
    $96, $AC, $74, $22, $E7, $AD, $35, $85, $E2, $F9, $37, $E8, $1C, $75, $DF, $6E,
    $47, $F1, $1A, $71, $1D, $29, $C5, $89, $6F, $B7, $62, $0E, $AA, $18, $BE, $1B,
    $FC, $56, $3E, $4B, $C6, $D2, $79, $20, $9A, $DB, $C0, $FE, $78, $CD, $5A, $F4,
    $1F, $DD, $A8, $33, $88, $07, $C7, $31, $B1, $12, $10, $59, $27, $80, $EC, $5F,
    $60, $51, $7F, $A9, $19, $B5, $4A, $0D, $2D, $E5, $7A, $9F, $93, $C9, $9C, $EF,
    $A0, $E0, $3B, $4D, $AE, $2A, $F5, $B0, $C8, $EB, $BB, $3C, $83, $53, $99, $61,
    $17, $2B, $04, $7E, $BA, $77, $D6, $26, $E1, $69, $14, $63, $55, $21, $0C, $7D);

  FFlog: array[0..255] of byte = (
    $00, $00, $19, $01, $32, $02, $1A, $C6, $4B, $C7, $1B, $68, $33, $EE, $DF, $03,
    $64, $04, $E0, $0E, $34, $8D, $81, $EF, $4C, $71, $08, $C8, $F8, $69, $1C, $C1,
    $7D, $C2, $1D, $B5, $F9, $B9, $27, $6A, $4D, $E4, $A6, $72, $9A, $C9, $09, $78,
    $65, $2F, $8A, $05, $21, $0F, $E1, $24, $12, $F0, $82, $45, $35, $93, $DA, $8E,
    $96, $8F, $DB, $BD, $36, $D0, $CE, $94, $13, $5C, $D2, $F1, $40, $46, $83, $38,
    $66, $DD, $FD, $30, $BF, $06, $8B, $62, $B3, $25, $E2, $98, $22, $88, $91, $10,
    $7E, $6E, $48, $C3, $A3, $B6, $1E, $42, $3A, $6B, $28, $54, $FA, $85, $3D, $BA,
    $2B, $79, $0A, $15, $9B, $9F, $5E, $CA, $4E, $D4, $AC, $E5, $F3, $73, $A7, $57,
    $AF, $58, $A8, $50, $F4, $EA, $D6, $74, $4F, $AE, $E9, $D5, $E7, $E6, $AD, $E8,
    $2C, $D7, $75, $7A, $EB, $16, $0B, $F5, $59, $CB, $5F, $B0, $9C, $A9, $51, $A0,
    $7F, $0C, $F6, $6F, $17, $C4, $49, $EC, $D8, $43, $1F, $2D, $A4, $76, $7B, $B7,
    $CC, $BB, $3E, $5A, $FB, $60, $B1, $86, $3B, $52, $A1, $6C, $AA, $55, $29, $9D,
    $97, $B2, $87, $90, $61, $BE, $DC, $FC, $BC, $95, $CF, $CD, $37, $3F, $5B, $D1,
    $53, $39, $84, $3C, $41, $A2, $6D, $47, $14, $2A, $9E, $5D, $56, $F2, $D3, $AB,
    $44, $11, $92, $D9, $23, $20, $2E, $89, $B4, $7C, $B8, $26, $77, $99, $E3, $A5,
    $67, $4A, $ED, $DE, $C5, $31, $FE, $18, $0D, $63, $8C, $80, $C0, $F7, $70, $07);

  FFpow: array[0..509] of byte = (
    $01, $03, $05, $0F, $11, $33, $55, $FF, $1A, $2E, $72, $96, $A1, $F8, $13, $35,
    $5F, $E1, $38, $48, $D8, $73, $95, $A4, $F7, $02, $06, $0A, $1E, $22, $66, $AA,
    $E5, $34, $5C, $E4, $37, $59, $EB, $26, $6A, $BE, $D9, $70, $90, $AB, $E6, $31,
    $53, $F5, $04, $0C, $14, $3C, $44, $CC, $4F, $D1, $68, $B8, $D3, $6E, $B2, $CD,
    $4C, $D4, $67, $A9, $E0, $3B, $4D, $D7, $62, $A6, $F1, $08, $18, $28, $78, $88,
    $83, $9E, $B9, $D0, $6B, $BD, $DC, $7F, $81, $98, $B3, $CE, $49, $DB, $76, $9A,
    $B5, $C4, $57, $F9, $10, $30, $50, $F0, $0B, $1D, $27, $69, $BB, $D6, $61, $A3,
    $FE, $19, $2B, $7D, $87, $92, $AD, $EC, $2F, $71, $93, $AE, $E9, $20, $60, $A0,
    $FB, $16, $3A, $4E, $D2, $6D, $B7, $C2, $5D, $E7, $32, $56, $FA, $15, $3F, $41,
    $C3, $5E, $E2, $3D, $47, $C9, $40, $C0, $5B, $ED, $2C, $74, $9C, $BF, $DA, $75,
    $9F, $BA, $D5, $64, $AC, $EF, $2A, $7E, $82, $9D, $BC, $DF, $7A, $8E, $89, $80,
    $9B, $B6, $C1, $58, $E8, $23, $65, $AF, $EA, $25, $6F, $B1, $C8, $43, $C5, $54,
    $FC, $1F, $21, $63, $A5, $F4, $07, $09, $1B, $2D, $77, $99, $B0, $CB, $46, $CA,
    $45, $CF, $4A, $DE, $79, $8B, $86, $91, $A8, $E3, $3E, $42, $C6, $51, $F3, $0E,
    $12, $36, $5A, $EE, $29, $7B, $8D, $8C, $8F, $8A, $85, $94, $A7, $F2, $0D, $17,
    $39, $4B, $DD, $7C, $84, $97, $A2, $FD, $1C, $24, $6C, $B4, $C7, $52, $F6,
    $01, $03, $05, $0F, $11, $33, $55, $FF, $1A, $2E, $72, $96, $A1, $F8, $13, $35,
    $5F, $E1, $38, $48, $D8, $73, $95, $A4, $F7, $02, $06, $0A, $1E, $22, $66, $AA,
    $E5, $34, $5C, $E4, $37, $59, $EB, $26, $6A, $BE, $D9, $70, $90, $AB, $E6, $31,
    $53, $F5, $04, $0C, $14, $3C, $44, $CC, $4F, $D1, $68, $B8, $D3, $6E, $B2, $CD,
    $4C, $D4, $67, $A9, $E0, $3B, $4D, $D7, $62, $A6, $F1, $08, $18, $28, $78, $88,
    $83, $9E, $B9, $D0, $6B, $BD, $DC, $7F, $81, $98, $B3, $CE, $49, $DB, $76, $9A,
    $B5, $C4, $57, $F9, $10, $30, $50, $F0, $0B, $1D, $27, $69, $BB, $D6, $61, $A3,
    $FE, $19, $2B, $7D, $87, $92, $AD, $EC, $2F, $71, $93, $AE, $E9, $20, $60, $A0,
    $FB, $16, $3A, $4E, $D2, $6D, $B7, $C2, $5D, $E7, $32, $56, $FA, $15, $3F, $41,
    $C3, $5E, $E2, $3D, $47, $C9, $40, $C0, $5B, $ED, $2C, $74, $9C, $BF, $DA, $75,
    $9F, $BA, $D5, $64, $AC, $EF, $2A, $7E, $82, $9D, $BC, $DF, $7A, $8E, $89, $80,
    $9B, $B6, $C1, $58, $E8, $23, $65, $AF, $EA, $25, $6F, $B1, $C8, $43, $C5, $54,
    $FC, $1F, $21, $63, $A5, $F4, $07, $09, $1B, $2D, $77, $99, $B0, $CB, $46, $CA,
    $45, $CF, $4A, $DE, $79, $8B, $86, $91, $A8, $E3, $3E, $42, $C6, $51, $F3, $0E,
    $12, $36, $5A, $EE, $29, $7B, $8D, $8C, $8F, $8A, $85, $94, $A7, $F2, $0D, $17,
    $39, $4B, $DD, $7C, $84, $97, $A2, $FD, $1C, $24, $6C, $B4, $C7, $52, $F6);

  a = $02;
  b = $03;
  c = $0E;
  d = $0B;
  e = $0D;
  f = $09;
 
var
  Form1: TForm1;
  keyshedule128: array[0..43, 0..3] of byte;
  initialKey: array[0..15] of byte;
  byteCounter: integer;
  keyCounter: integer;
  key,rez:string;
  state: array[0..3, 0..3] of byte;
  bul:integer;
  cx:array[0..450000] of byte;

implementation

{$R *.dfm}

function FFMul(const a, b: byte): byte;
begin
  if ((a <> 0) and (b <> 0)) then
    Result := FFPow[FFlog[a] + FFlog[b]]
  else
    Result := 0;
end;



і т.д.


Повернутися наверх
  
 
 Заголовок повідомлення: Re: AES
СообщениеДодано: 09 гру 2014, 20:48 
Не в мережі

Повідомлень: 282
На даний час ефективного методу знаходження ключа AES так і не розробили.

Існує декілька теоритичних робіт (наприклад, Ніколя Куртуа (Nicolas Courtois), Йозеф Пепшик (Josef Pieprzyk), XSL-атака (англ. eXtended Sparse Linearization), 2002 рік, але щодо коректноості такої атаки і до цих пір точаться суперечки.) які на даний час не дають надії навіть щодо пониження стійкості шифру AES.


Повернутися наверх
  
 
Показати повідомлення за:  Сортувати по:  
Розпочати нову тему Відповісти  [ 20 повідомлень ] 

Часовий пояс: UTC десь + 2 години



cron
Роwеrеd bу рhрВB® аnd Hostinger web hosting