ΠŸΠΎΠΌΠΎΡ‰ΡŒ Π² ΡƒΡ‡Ρ‘Π±Π΅, ΠΎΡ‡Π΅Π½ΡŒ быстро...
Π Π°Π±ΠΎΡ‚Π°Π΅ΠΌ вмСстС Π΄ΠΎ ΠΏΠΎΠ±Π΅Π΄Ρ‹

Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° криптографичСской ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ (стандарт DES)

ΠšΡƒΡ€ΡΠΎΠ²Π°ΡΠŸΠΎΠΌΠΎΡ‰ΡŒ Π² Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΠΈΠ£Π·Π½Π°Ρ‚ΡŒ ΡΡ‚ΠΎΠΈΠΌΠΎΡΡ‚ΡŒΠΌΠΎΠ΅ΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹

Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰ΡƒΡŽ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΡ ΠΈ Ρ€Π°ΡΡˆΠΈΡ„рования ΠΏΠΎ ΡΡ‚Π°Π½Π΄Π°Ρ€Ρ‚Ρƒ DES (Data Encryption Standard). Π’ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ ΠΏΡ€Π΅Π΄ΡƒΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΡ/Ρ€Π°ΡΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΡ Π² Ρ€Π΅ΠΆΠΈΠΌΠ°Ρ…: элСктронная кодовая ΠΊΠ½ΠΈΠ³Π° Π•Π‘Π’, сцСплСниС Π±Π»ΠΎΠΊΠΎΠ² ΡˆΠΈΡ„Ρ€Π° Π‘Π’Π‘, Ρ‚Ρ€ΠΎΠΉΠ½ΠΎΠΉ DES (EEE3, EDE3, EEE2 ΠΈ EDE2). ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π΄ΠΎΠ»ΠΆΠ½Π° Π²Ρ‹Π΄Π°Π²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Ρ‹Π΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΡ/Ρ€Π°ΡΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΡ. На Π³Π»Π°Π²Π½ΠΎΠΌ ΠΎΠΊΠ½Π΅ располоТСно… Π§ΠΈΡ‚Π°Ρ‚ΡŒ Π΅Ρ‰Ρ‘ >

Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° криптографичСской ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ (стандарт DES) (Ρ€Π΅Ρ„Π΅Ρ€Π°Ρ‚, курсовая, Π΄ΠΈΠΏΠ»ΠΎΠΌ, ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Π°Ρ)

Π€Π΅Π΄Π΅Ρ€Π°Π»ΡŒΠ½ΠΎΠ΅ государствСнноС Π±ΡŽΠ΄ΠΆΠ΅Ρ‚Π½ΠΎΠ΅ ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ ΡƒΡ‡Ρ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠ΅ Π²Ρ‹ΡΡˆΠ΅Π³ΠΎ ΠΏΡ€ΠΎΡ„Π΅ΡΡΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ образования Π”Π°Π»ΡŒΠ½Π΅Π²ΠΎΡΡ‚ΠΎΡ‡Π½Ρ‹ΠΉ государствСнный унивСрситСт ΠΏΡƒΡ‚Π΅ΠΉ сообщСния ΠšΠ°Ρ„Π΅Π΄Ρ€Π° «Π˜Π’ΠΈΠ‘»

ΠšΡƒΡ€ΡΠΎΠ²ΠΎΠΉ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚

«Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° криптографичСской ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ (стандарт DES)»

Π’Ρ‹ΠΏΠΎΠ»Π½ΠΈΠ»: ПинаСв П. Π‘.,

студСнт Π³Ρ€ΡƒΠΏΠΏΡ‹ 23К.

ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΈΠ»: Анисимов Π’.Π’.

Π₯абаровск 2013 Π³.

1. ΠšΡ€Π°Ρ‚ΠΊΠΈΠ΅ свСдСния ΠΎ ΡΡ‚Π°Π½Π΄Π°Ρ€Ρ‚Π΅ ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΡ DES

2. Π Π΅ΠΆΠΈΠΌ DES-ECB

2.1 ΠžΠ±Ρ‰Π°Ρ схСма ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΡ

2.2 ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΡ ΠΈ Ρ€Π°ΡΡˆΠΈΡ„рования

3. Π Π΅ΠΆΠΈΠΌ DES-CBC

3.1 ΠžΠ±Ρ‰Π°Ρ схСма ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΡ

3.2 ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΡ ΠΈ Ρ€Π°ΡΡˆΠΈΡ„рования

4. Π Π΅ΠΆΠΈΠΌ Ρ‚Ρ€ΠΎΠΉΠ½ΠΎΠΉ DES

4.1 ΠžΠ±Ρ‰ΠΈΠ΅ схСмы ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΡ

4.2 ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΡ ΠΈ Ρ€Π°ΡΡˆΠΈΡ„рования

5. Руководство ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹

  • 5.1 ΠžΠ±Ρ‰ΠΈΠ΅ свСдСния
    • 5.2 НазначСниС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹
    • 5.3 Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ тСхничСскиС срСдства
    • 5.4 Π’Ρ…ΠΎΠ΄Π½Ρ‹Π΅ ΠΈ Π²Ρ‹Ρ…ΠΎΠ΄Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅
    • 5.5 Π’Π²ΠΎΠ΄ Π² Π΄Π΅ΠΉΡΡ‚Π²ΠΈΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ срСдства
      • 5.5.1 Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡ
      • 5.5.2 ИспользованиС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ срСдства
    • 6. Код ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹

Π—Π°Π΄Π°Π½ΠΈΠ΅ Π½Π° Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ курсового ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°

Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰ΡƒΡŽ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΡ ΠΈ Ρ€Π°ΡΡˆΠΈΡ„рования ΠΏΠΎ ΡΡ‚Π°Π½Π΄Π°Ρ€Ρ‚Ρƒ DES (Data Encryption Standard). Π’ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ ΠΏΡ€Π΅Π΄ΡƒΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΡ/Ρ€Π°ΡΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΡ Π² Ρ€Π΅ΠΆΠΈΠΌΠ°Ρ…: элСктронная кодовая ΠΊΠ½ΠΈΠ³Π° Π•Π‘Π’, сцСплСниС Π±Π»ΠΎΠΊΠΎΠ² ΡˆΠΈΡ„Ρ€Π° Π‘Π’Π‘, Ρ‚Ρ€ΠΎΠΉΠ½ΠΎΠΉ DES (EEE3, EDE3, EEE2 ΠΈ EDE2). ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π΄ΠΎΠ»ΠΆΠ½Π° Π²Ρ‹Π΄Π°Π²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Ρ‹Π΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΡ/Ρ€Π°ΡΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΡ.

1. ΠšΡ€Π°Ρ‚ΠΊΠΈΠ΅ свСдСния ΠΎ ΡΡ‚Π°Π½Π΄Π°Ρ€Ρ‚Π΅ ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΡ DES

DES (Data Encryption Standard) симмСтричный Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΡ, Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½Ρ‹ΠΉ Ρ„ΠΈΡ€ΠΌΠΎΠΉ IBM ΠΈ ΡƒΡ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½Π½Ρ‹ΠΉ ΠΏΡ€Π°Π²ΠΈΡ‚Π΅Π»ΡŒΡΡ‚Π²ΠΎΠΌ БША Π² 1977 Π³ΠΎΠ΄Ρƒ ΠΊΠ°ΠΊ ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ стандарт (FIPS 46−3). DES ΠΈΠΌΠ΅Π΅Ρ‚ Π±Π»ΠΎΠΊΠΈ ΠΏΠΎ 64 Π±ΠΈΡ‚Π° ΠΈ 16 Ρ†ΠΈΠΊΠ»ΠΎΠ²ΡƒΡŽ структуру сСти ЀСйстСля. Для ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΡ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΠΊΠ»ΡŽΡ‡ с Π΄Π»ΠΈΠ½ΠΎΠΉ 56 Π±ΠΈΡ‚. Алгоритм ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΡŽ Π½Π΅Π»ΠΈΠ½Π΅ΠΉΠ½Ρ‹Ρ… (S-Π±Π»ΠΎΠΊΠΈ) ΠΈ Π»ΠΈΠ½Π΅ΠΉΠ½Ρ‹Ρ… (пСрСстановки E, IP, IP-1) ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠΉ. Для DES Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΠΎΠ²Π°Π½ΠΎ нСсколько Ρ€Π΅ΠΆΠΈΠΌΠΎΠ² использования:

Β· Ρ€Π΅ΠΆΠΈΠΌ элСктронной ΠΊΠΎΠ΄ΠΎΠ²ΠΎΠΉ ΠΊΠ½ΠΈΠ³ΠΈ (ECB — Electronic Code Book),

Β· Ρ€Π΅ΠΆΠΈΠΌ сцСплСния Π±Π»ΠΎΠΊΠΎΠ² (Π‘Π’Π‘ — Cipher Block Chaining),

Β· Ρ€Π΅ΠΆΠΈΠΌ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΉ связи ΠΏΠΎ ΡˆΠΈΡ„ротСксту (CFB — Cipher Feed Back),

Β· Ρ€Π΅ΠΆΠΈΠΌ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΉ связи ΠΏΠΎ Π²Ρ‹Ρ…ΠΎΠ΄Ρƒ (OFB — Output Feed Back).

ΠŸΡ€ΡΠΌΡ‹ΠΌ Ρ€Π°Π·Π²ΠΈΡ‚ΠΈΠ΅ΠΌ DES Π² Π½Π°ΡΡ‚оящСС врСмя являСтся Triple DES.

ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ достоинства Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° DES:

Β· ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ ΠΊΠ»ΡŽΡ‡ Π΄Π»ΠΈΠ½ΠΎΠΉ 56 Π±ΠΈΡ‚ΠΎΠ²;

Β· Π·Π°ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π² сообщСниС с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΏΠ°ΠΊΠ΅Ρ‚Π°, для Ρ€Π°ΡΡˆΠΈΡ„Ρ€ΠΎΠ²ΠΊΠΈ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ любой Π΄Ρ€ΡƒΠ³ΠΎΠΉ;

Β· ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ простота Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° обСспСчиваСт Π²Ρ‹ΡΠΎΠΊΡƒΡŽ ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ;

Β· достаточно высокая ΡΡ‚ΠΎΠΉΠΊΠΎΡΡ‚ΡŒ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ°.

2. Π Π΅ΠΆΠΈΠΌ DES-ECB

Π’ ΡΡ‚ΠΎΠΌ Ρ€Π΅ΠΆΠΈΠΌΠ΅ исходный Ρ„Π°ΠΉΠ» M Ρ€Π°Π·Π±ΠΈΠ²Π°Π΅Ρ‚ся Π½Π° 64-Π±ΠΈΡ‚ΠΎΠ²Ρ‹Π΅ Π±Π»ΠΎΠΊΠΈ (ΠΏΠΎ 8 Π±Π°ΠΉΡ‚ΠΎΠ²): M = M (1)M (2)…M (n). ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ· ΡΡ‚ΠΈΡ… Π±Π»ΠΎΠΊΠΎΠ² кодируСтся нСзависимо с ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈ Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ ΠΊΠ»ΡŽΡ‡Π° ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΡ. ОсновноС достоинство этого Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° — простота Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ. НСдостаток — ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ слабая ΡƒΡΡ‚ΠΎΠΉΡ‡ΠΈΠ²ΠΎΡΡ‚ΡŒ ΠΏΡ€ΠΎΡ‚ΠΈΠ² ΠΊΠ²Π°Π»ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… ΠΊΡ€ΠΈΠΏΡ‚ΠΎΠ°Π½Π°Π»ΠΈΡ‚ΠΈΠΊΠΎΠ². Π’ Ρ‡Π°ΡΡ‚ности, Π½Π΅ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΠ΅Ρ‚ся ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹ΠΉ Ρ€Π΅ΠΆΠΈΠΌ Ρ€Π°Π±ΠΎΡ‚Ρ‹ для ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΡ EXE Ρ„Π°ΠΉΠ»ΠΎΠ², ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ ΠΆΠ΅ Π±Π»ΠΎΠΊ — Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ Ρ„Π°ΠΉΠ»Π°, являСтся Π²ΠΏΠΎΠ»Π½Π΅ ΡƒΠ΄Π°Ρ‡Π½Ρ‹ΠΌ Π½Π°Ρ‡Π°Π»ΠΎΠΌ для Π²Π·Π»ΠΎΠΌΠ° всСго ΡˆΠΈΡ„Ρ€Π°.

Π’ Ρ‚ΠΎ ΠΆΠ΅ врСмя слСдуСт ΠΏΡ€ΠΈΠ·Π½Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ этот Ρ€Π΅ΠΆΠΈΠΌ Π² ΡΠΈΠ»Ρƒ своСй простой Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ популярСн.

2.1 ΠžΠ±Ρ‰Π°Ρ схСма ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΡ

ΠŸΡ€ΠΎΡ†Π΅ΡΡ ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΡ Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠΉ пСрСстановкС Π±ΠΈΡ‚ΠΎΠ² 64-Π±ΠΈΡ‚ΠΎΠ²ΠΎΠ³ΠΎ Π±Π»ΠΎΠΊΠ°, ΡˆΠ΅ΡΡ‚Π½Π°Π΄Ρ†Π°Ρ‚ΠΈ Ρ†ΠΈΠΊΠ»Π°Ρ… ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΡ ΠΈ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΉ пСрСстановки Π±ΠΈΡ‚ΠΎΠ² (рисунок 1). ВсС пСрСстановки ΠΈ ΠΊΠΎΠ΄Ρ‹ Π² Ρ‚Π°Π±Π»ΠΈΡ†Π°Ρ… ΠΏΠΎΠ΄ΠΎΠ±Ρ€Π°Π½Ρ‹ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌΠΈ Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ максимально Π·Π°Ρ‚Ρ€ΡƒΠ΄Π½ΠΈΡ‚ΡŒ процСсс Ρ€Π°ΡΡˆΠΈΡ„Ρ€ΠΎΠ²ΠΊΠΈ ΠΏΡƒΡ‚Π΅ΠΌ ΠΏΠΎΠ΄Π±ΠΎΡ€Π° ΠΊΠ»ΡŽΡ‡Π°. Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° DES ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π° Π½Π° Ρ€ΠΈΡΡƒΠ½ΠΊΠ΅ 2.

Рисунок 1. ΠžΠ±ΠΎΠ±Ρ‰Π΅Π½Π½Π°Ρ схСма ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΡ Из ΡˆΠΈΡ„Ρ€ΡƒΠ΅ΠΌΠΎΠΉ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π±Π°ΠΉΡ‚ выбираСтся ΠΎΡ‡Π΅Ρ€Π΅Π΄Π½ΠΎΠΉ 8-Π±Π°ΠΉΡ‚ΠΎΠ²Ρ‹ΠΉ Π±Π»ΠΎΠΊ T, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ прСобразуСтся с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠΉ пСрСстановки IP (Ρ‚Π°Π±Π»ΠΈΡ†Π° 1) ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ: Π±ΠΈΡ‚ 58 Π±Π»ΠΎΠΊΠ° T ΡΡ‚ановится Π±ΠΈΡ‚ΠΎΠΌ 1, Π±ΠΈΡ‚ 50 — Π±ΠΈΡ‚ΠΎΠΌ 2 ΠΈ Ρ‚. Π΄., Ρ‡Ρ‚ΠΎ даст Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅: T (0) = IP (T).

ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½Π½Π°Ρ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π±ΠΈΡ‚ΠΎΠ² T (0) раздСляСтся Π½Π° Π΄Π²Π΅ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΏΠΎ 32 Π±ΠΈΡ‚Π° каТдая: L (0) — Π»Π΅Π²Ρ‹Π΅ ΠΈΠ»ΠΈ ΡΡ‚Π°Ρ€ΡˆΠΈΠ΅ Π±ΠΈΡ‚Ρ‹, R (0) — ΠΏΡ€Π°Π²Ρ‹Π΅ ΠΈΠ»ΠΈ младшиС Π±ΠΈΡ‚Ρ‹.

Рисунок 2. Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΡ DES

Π’Π°Π±Π»ΠΈΡ†Π° 1. ΠœΠ°Ρ‚Ρ€ΠΈΡ†Π° Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠΉ пСрСстановки IP

Π—Π°Ρ‚Π΅ΠΌ выполняСтся ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΠ΅, состоящСС ΠΈΠ· 16 ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΉ. Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ i-ΠΉ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ описываСтся ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌΠΈ Ρ„ΠΎΡ€ΠΌΡƒΠ»Π°ΠΌΠΈ:

Ѐункция f Π½Π°Π·Ρ‹Π²Π°Π΅Ρ‚ся Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΡ. Π•Π΅ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ — это 32-битовая ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ R (i-1), получСнная Π½Π° (i-1)-ΠΎΠΉ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ, ΠΈ 48-Π±ΠΈΡ‚ΠΎΠ²Ρ‹ΠΉ ΠΊΠ»ΡŽΡ‡ K (i), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ являСтся Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠΌ прСобразования 64-Π±ΠΈΡ‚ΠΎΠ²ΠΎΠ³ΠΎ ΠΊΠ»ΡŽΡ‡Π° K.

На 16-ΠΉ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽΡ‚ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ R (16) ΠΈ L (16) (Π±Π΅Π· пСрСстановки), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΊΠΎΠ½ΠΊΠ°Ρ‚Π΅Π½ΠΈΡ€ΡƒΡŽΡ‚ Π² 64-Π±ΠΈΡ‚ΠΎΠ²ΡƒΡŽ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ R (16)L (16). Π—Π°Ρ‚Π΅ΠΌ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ Π±ΠΈΡ‚ΠΎΠ² этой ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΏΠ΅Ρ€Π΅ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ Π² ΡΠΎΠΎΡ‚вСтствии с ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π΅ΠΉ (Π’Π°Π±Π»ΠΈΡ†Π° 2).

Π’Π°Π±Π»ΠΈΡ†Π° 2. ΠœΠ°Ρ‚Ρ€ΠΈΡ†Π° ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠΉ пСрСстановки

ΠœΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ IP-1 ΠΈ IP соотносятся ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ: Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 1-Π³ΠΎ элСмСнта ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ Ρ€Π°Π²Π½ΠΎ 40, Π° Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 40-Π³ΠΎ элСмСнта ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ IP Ρ€Π°Π²Π½ΠΎ 1, Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 2-Π³ΠΎ элСмСнта ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ Ρ€Π°Π²Π½ΠΎ 8, Π° Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 8-Π³ΠΎ элСмСнта ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ IP Ρ€Π°Π²Π½ΠΎ 2 ΠΈ Ρ‚. Π΄.

АргумСнтами Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ f ΡΠ²Π»ΡΡŽΡ‚ся 32-Π±ΠΈΡ‚ΠΎΠ²Ρ‹ΠΉ Π²Π΅ΠΊΡ‚ΠΎΡ€ ΠΈ 48-Π±ΠΈΡ‚ΠΎΠ²Ρ‹ΠΉ ΠΊΠ»ΡŽΡ‡, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ являСтся Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠΌ прСобразования 56-Π±ΠΈΡ‚ΠΎΠ²ΠΎΠ³ΠΎ исходного ΠΊΠ»ΡŽΡ‡Π° ΡˆΠΈΡ„Ρ€Π° K.

Для вычислСния Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ f ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ функция Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ E, слоТСниС ΠΏΠΎ ΠΌΠΎΠ΄ΡƒΠ»ΡŽ 2 с ΠΊΠ»ΡŽΡ‡ΠΎΠΌ, ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ S, состоящСС ΠΈΠ· 8 ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠΉ S-Π±Π»ΠΎΠΊΠΎΠ², пСрСстановка P.

Ѐункция E Ρ€Π°ΡΡˆΠΈΡ€ΡΠ΅Ρ‚ 32-Π±ΠΈΡ‚ΠΎΠ²Ρ‹ΠΉ Π²Π΅ΠΊΡ‚ΠΎΡ€ Π΄ΠΎ 48-Π±ΠΈΡ‚ΠΎΠ²ΠΎΠ³ΠΎ Π²Π΅ΠΊΡ‚ΠΎΡ€Π° E ΠΏΡƒΡ‚Ρ‘ΠΌ дублирования Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π±ΠΈΡ‚ΠΎΠ² ΠΈΠ·. ΠŸΠΎΡ€ΡΠ΄ΠΎΠΊ Π±ΠΈΡ‚ΠΎΠ² Π²Π΅ΠΊΡ‚ΠΎΡ€Π° ΡƒΠΊΠ°Π·Π°Π½ Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ 3.

ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹ΠΉ послС пСрСстановки Π±Π»ΠΎΠΊ складываСтся ΠΏΠΎ ΠΌΠΎΠ΄ΡƒΠ»ΡŽ 2 с ΠΊΠ»ΡŽΡ‡Π°ΠΌΠΈ ΠΈ Π·Π°Ρ‚Π΅ΠΌ прСдставляСтся Π² Π²ΠΈΠ΄Π΅ восьми ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… Π±Π»ΠΎΠΊΠΎΠ².

Π’Π°Π±Π»ΠΈΡ†Π° 3. Ѐункция Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ E

ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ Π±Π»ΠΎΠΊ являСтся 6-Π±ΠΈΡ‚ΠΎΠ²Ρ‹ΠΌ Π±Π»ΠΎΠΊΠΎΠΌ. Π”Π°Π»Π΅Π΅ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ· Π±Π»ΠΎΠΊΠΎΠ² трансформируСтся Π² 4-Π±ΠΈΡ‚ΠΎΠ²Ρ‹ΠΉ Π±Π»ΠΎΠΊ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ ΡƒΠ·Π»Π° Π·Π°ΠΌΠ΅Π½Ρ‹ Sj (Ρ‚Π°Π±Π»ΠΈΡ†Π° 3).

Π’Π°Π±Π»ΠΈΡ†Π° 4. Π£Π·Π»Ρ‹ Π·Π°ΠΌΠ΅Π½Ρ‹

Если Π½Π° Π²Ρ…ΠΎΠ΄ Sj ΠΏΠΎΡΡ‚ΡƒΠΏΠ°Π΅Ρ‚ Π±Π»ΠΎΠΊ, Ρ‚ΠΎ Π΄Π²ΡƒΡ…Π±ΠΈΡ‚ΠΎΠ²ΠΎΠ΅ число ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½ΠΎΠΌΠ΅Ρ€ строки ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹, Π° Ρ‡Π΅Ρ‚Ρ‹Ρ€Ρ‘Ρ…Π±ΠΈΡ‚ΠΎΠ²ΠΎΠ΅ число — Π½ΠΎΠΌΠ΅Ρ€ столбца Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ ΡƒΠ·Π»ΠΎΠ² Π·Π°ΠΌΠ΅Π½. Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ примСнСния ΡƒΠ·Π»Π° Π·Π°ΠΌΠ΅Π½Ρ‹ Sj ΠΊ Π±Π»ΠΎΠΊΡƒ получаСтся число (ΠΎΡ‚ 0 Π΄ΠΎ 15), ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ прСобразуСтся Π² .

ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹Π΅ восСмь элСмСнтов tj Π²Π½ΠΎΠ²ΡŒ ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΡΡŽΡ‚ΡΡ Π² 32-Π±ΠΈΡ‚ΠΎΠ²Ρ‹ΠΉ Π±Π»ΠΎΠΊ H'. Π’ H' выполняСтся пСрСстановка Π±ΠΈΡ‚ΠΎΠ² P (Ρ‚Π°Π±Π»ΠΈΡ†Π° 5).

Π’Π°Π±Π»ΠΈΡ†Π° 5. ΠŸΠ΅Ρ€Π΅ΡΡ‚Π°Π½ΠΎΠ²ΠΊΠ° Π 

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ послСднСй ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ ΠΈ ΡΠ²Π»ΡΠ΅Ρ‚ся Π²Ρ‹Ρ…ΠΎΠ΄Π½Ρ‹ΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΡ .

ΠšΠ»ΡŽΡ‡Π΅Π²Ρ‹Π΅ элСмСнты Π²Ρ‹Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‚ΡΡ ΠΈΠ· ΠΊΠ»ΡŽΡ‡Π° с ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ сдвигов ΠΈ Π±ΠΈΡ‚ΠΎΠ²Ρ‹Ρ… Π²Ρ‹Π±ΠΎΡ€ΠΎΠΊ-пСрСстановок. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Π΅ элСмСнты состоят ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΈΠ· Π±ΠΈΡ‚ΠΎΠ² исходного ΠΊΠ»ΡŽΡ‡Π°, «ΠΏΠ΅Ρ€Π΅Ρ‚асованных» Π² Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΎΠΌ порядкС. Π‘Ρ…Π΅ΠΌΠ° Π²Ρ‹Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Ρ… элСмСнтов ΠΏΠΎΠΊΠ°Π·Π°Π½Π° Π½Π° Ρ€ΠΈΡΡƒΠ½ΠΊΠ΅ 3.

Рисунок 3. Π‘Ρ…Π΅ΠΌΠ° Π²Ρ‹Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Ρ… элСмСнтов Π˜Π·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ ΠΊΠ»ΡŽΡ‡ состоит ΠΈΠ· 56 Π±ΠΈΡ‚. Но Π΄Π»Ρ контроля цСлостности ΠΊΠ»ΡŽΡ‡Π° ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒ чСтности. Для этого 56 Π±ΠΈΡ‚Π½Ρ‹ΠΉ ΠΊΠ»ΡŽΡ‡ Ρ€Π°Π·Π±ΠΈΠ²Π°ΡŽΡ‚ Π½Π° Π±Π»ΠΎΠΊΠΈ ΠΏΠΎ 7 Π±ΠΈΡ‚ ΠΈ ΠΊ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡƒ Π±Π»ΠΎΠΊΡƒ Π΄ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ восьмой Π±ΠΈΡ‚, ΡΠ²Π»ΡΡŽΡ‰ΠΈΠΉΡΡ Π±ΠΈΡ‚ΠΎΠΌ чСтности. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ получаСтся ΠΊΠ»ΡŽΡ‡ ΠΈΠ· 64 Π±ΠΈΡ‚.

Π’Ρ‹Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Ρ… элСмСнтов ΠΈΠ· ΠΊΠ»ΡŽΡ‡Π° K Π½Π°Ρ‡ΠΈΠ½Π°Π΅Ρ‚ся со Π²Ρ…ΠΎΠ΄Π½ΠΎΠΉ Π²Ρ‹Π±ΠΎΡ€ΠΊΠΈ-пСрСстановки Π±ΠΈΡ‚ΠΎΠ² PC1 (Ρ‚Π°Π±Π»ΠΈΡ†Π° 6), которая ΠΎΡ‚Π±ΠΈΡ€Π°Π΅Ρ‚ 56 ΠΈΠ· 64 Π±ΠΈΡ‚ΠΎΠ² ΠΊΠ»ΡŽΡ‡Π° ΠΈ Ρ€Π°ΡΠΏΠΎΠ»Π°Π³Π°Π΅Ρ‚ ΠΈΡ… Π² Π΄Ρ€ΡƒΠ³ΠΎΠΌ порядкС.

Π’Π°Π±Π»ΠΈΡ†Π° 6. ΠŸΠ΅Ρ€Π΅ΡΡ‚Π°Π½ΠΎΠ²ΠΊΠ° PC1

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π²Ρ‹Π±ΠΎΡ€ΠΊΠΈ-пСрСстановки K* раздСляСтся Π½Π° Π΄Π²Π΅ 28-Π±ΠΈΡ‚ΠΎΠ²Ρ‹Π΅ части: ΡΡ‚Π°Ρ€ΡˆΡƒΡŽ Π‘1 ΠΈ ΠΌΠ»Π°Π΄ΡˆΡƒΡŽ D1. Π’ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΠΈ ΠΎΡ‚ Π½ΠΎΠΌΠ΅Ρ€Π° ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ ΠΎΠ±Π΅ части цикличСски ΡΠ΄Π²ΠΈΠ³Π°ΡŽΡ‚ΡΡ Π½Π° 1 ΠΈΠ»ΠΈ 2 Π±ΠΈΡ‚Π° Π²Π»Π΅Π²ΠΎ согласно Ρ‚Π°Π±Π»ΠΈΡ†Π΅ 7.

Π’Π°Π±Π»ΠΈΡ†Π° 7. ЦикличСский сдвиг Из ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹Ρ… Π±Π»ΠΎΠΊΠΎΠ² с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π²Ρ‹Ρ…ΠΎΠ΄Π½ΠΎΠΉ Π±ΠΈΡ‚ΠΎΠ²ΠΎΠΉ Π²Ρ‹Π±ΠΎΡ€ΠΊΠΈ-пСрСстановки PC2 (Ρ‚Π°Π±Π»ΠΈΡ†Π° 8) ΠΎΡ‚Π±ΠΈΡ€Π°ΡŽΡ‚ΡΡ ΠΏΠ΅Ρ€Π²Ρ‹Π΅ 48 Π±ΠΈΡ‚ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈ Ρ„ΠΎΡ€ΠΌΠΈΡ€ΡƒΡŽΡ‚ ΠΎΡ‡Π΅Ρ€Π΅Π΄Π½ΠΎΠΉ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠΉ элСмСнт.

Π’Π°Π±Π»ΠΈΡ†Π° 8. ΠŸΠ΅Ρ€Π΅ΡΡ‚Π°Π½ΠΎΠ²ΠΊΠ° PC2

ΠŸΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΡ ΠΈ Π΄Π΅ΡˆΠΈΡ„рования ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ‡Π½Ρ‹, Π·Π° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ порядка использования ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Ρ… элСмСнтов ki. ΠŸΡ€ΠΈ Π΄Π΅ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΠΈ Π΄Π°Π½Π½Ρ‹Ρ… всС дСйствия Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ Π² ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΌ порядкС. Π’ 16 Ρ†ΠΈΠΊΠ»Π°Ρ… Π΄Π΅ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΡ, Π² ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ ΡˆΠΈΡ„рования c ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ прямого прСобразования ΡΠ΅Ρ‚ΡŒΡŽ ЀСйстСля, здСсь ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠ΅ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠ΅Ρ‚ΡŒΡŽ ЀСйстСля.

Π‘Ρ…Π΅ΠΌΠ° Π΄Π΅ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΡ ΡƒΠΊΠ°Π·Π°Π½Π° Π½Π° Ρ€ΠΈΡΡƒΠ½ΠΊΠ΅ 4.

Рисунок 4. Π‘Ρ…Π΅ΠΌΠ° Π΄Π΅ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΡ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° DES

2.2 ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΡ ΠΈ Ρ€Π°ΡΡˆΠΈΡ„рования

Π˜ΡΡ…ΠΎΠ΄Π½Ρ‹ΠΉ тСкст: Pinaev

ΠšΠ»ΡŽΡ‡: Pavelll

Π˜ΡΡ…ΠΎΠ΄Π½Ρ‹ΠΉ Π±Π»ΠΎΠΊ Π±ΠΈΡ‚… Π‘Π»ΠΎΠΊ № 0:

1 010 10 010 110 1 110 110 10 000 110 10 100 110 1 101 110 0 0

ΠŸΠ΅Ρ€Π΅Π²Π΅Ρ€Π½ΡƒΡ‚Ρ‹Π΅ Π±ΠΈΡ‚Ρ‹ Π² Π±Π»ΠΎΠΊΠ΅…:

1 010 000 1 101 001 1 101 110 1 100 001 1 100 101 1 110 110 0 0

ΠšΠ»ΡŽΡ‡ ΠΈΠ· 56 Π±ΠΈΡ‚:

101 000__11 000__101 110__1 100 110__101 011__110 001__1 011 000__1 101 100__

ΠšΠ»ΡŽΡ‡ ΠΈΠ· 64 Π±ΠΈΡ‚Π°, послС добавлСния Π±ΠΈΡ‚ чСтности:

1 010 000 110 000 1 011 100 11 001 100 1 010 110 1 100 011 10 110 001 11 011 000

**********************Π¨Π˜Π€Π ΠžΠ’ΠΠΠ˜Π•**********************

Π˜ΡΡ…ΠΎΠ΄Π½ΠΎΠ΅ сообщСниС:

1 010 000 1 101 001 1 101 110 1 100 001 1 100 101 1 110 110 0 0

ΠΠ°Ρ‡Π°Π»ΡŒΠ½Π°Ρ пСрСстановка IP:

111 111 100 001 110 100 11 010 0 111 110 110 100 100

HPart:

111 111 100 001 110 100 11 010

LPart:

0 111 110 110 100 100

ΠšΠ»ΡŽΡ‡ 64 Π±ΠΈΡ‚Π°. Π‘ Π±ΠΈΡ‚Π°ΠΌΠΈ чСтности:

1 010 000 110 000 1 011 100 11 001 100 1 010 110 1 100 011 10 110 001 11 011 000

ΠΊΠ»ΡŽΡ‡ (56). ΠŸΠ΅Ρ€Π΅ΡΡ‚Π°Π½ΠΎΠ²ΠΊΠ° Π Π‘1:

11 001 000 10 111 101 1 100 010 11 010 011 1 11 001 000 11 000 111

ΠΊΠ»ΡŽΡ‡ (28C (Left)):

1100 1000 1011 1101 0110 0010 1101

ΠΊΠ»ΡŽΡ‡ (28D (Right)):

0011 0000 0001 1100 1000 1100 0111

Π˜Ρ‚Π΅Ρ€Π°Ρ†ΠΈΡ № 1

ΠšΠ»ΡŽΡ‡ ΠΈΠ· 56 Π±ΠΈΡ‚ послС цикличСского сдвига, итСрация 1:

1 001 000 101 111 010 080 195 608 576 110 000 000 111 000 993 746 911 232

ΠšΠ»ΡŽΡ‡ ΠΈΠ· 48 Π±ΠΈΡ‚. ΠŸΠ΅Ρ€Π΅ΡΡ‚Π°Π½ΠΎΠ²ΠΊΠ° Π Π‘2:

1 111 001 10 010 011 1 001 010 10 100 111 11 110 1 000 000

LPart, ΠΠ°Ρ‡Π°Π»Π°ΡΡŒ функция ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ f:

0 111 110 110 100 100

ΠŸΠ΅Ρ€Π΅Π²Π΅Π»ΠΈ 32 Π² 48. Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ Π•:

0 1 11 111 100 0 11 000 001 1 000

Xor. ΠΏΠΎΠ±ΠΈΡ‚ΠΎΠ²ΠΎ суммируСм ΠΏΠΎ ΠΌΠΎΠ΄ΡƒΠ»ΡŽ 2:

1 111 001 10 010 010 10 110 110 10 100 111 11 011 111 1 001 000

ΠŸΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π»ΠΈ 48 Π² 32. Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΡƒΠ·Π»ΠΎΠ² Π·Π°ΠΌΠ΅Π½Ρ‹:

1 110 110 111 110 11 000 110 110

ΠŸΠ΅Ρ€Π΅ΡΡ‚Π°Π½ΠΎΠ²ΠΊΠ° Π±ΠΈΡ‚ Π² ΠΊΠΎΠ½Ρ†Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. ΠŸΠ΅Ρ€Π΅ΡΡ‚Π°Π½ΠΎΠ²ΠΊΠ° P:

1 110 110 1 000 010 10 010 110 1 110 110

HPart послС ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ. HPart XOR f (LPart, Key):

1 001 001 1 100 011 10 100 010 1 101 100

ПослС обмСна HPart:

0 111 110 110 100 100

ПослС обмСна LPart:

1 001 001 1 100 011 10 100 010 1 101 100

Π˜Ρ‚Π΅Ρ€Π°Ρ†ΠΈΡ № 16

ΠšΠ»ΡŽΡ‡ ΠΈΠ· 56 Π±ΠΈΡ‚ послС цикличСского сдвига, итСрация 16:

1 100 100 010 111 100 980 075 429 888 11 000 000 011 100 100 663 181 312

ΠšΠ»ΡŽΡ‡ ΠΈΠ· 48 Π±ΠΈΡ‚. ΠŸΠ΅Ρ€Π΅ΡΡ‚Π°Π½ΠΎΠ²ΠΊΠ° Π Π‘2:

10 101 101 1 110 10 100 011 10 100 101 1 000 101 11 001

LPart, ΠΠ°Ρ‡Π°Π»Π°ΡΡŒ функция ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ f:

11 100 110 11 110 001 10 001 000 11 001 010

ΠŸΠ΅Ρ€Π΅Π²Π΅Π»ΠΈ 32 Π² 48. Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ Π•:

1 110 000 11 010 111 10 100 011 11 000 101 10 110 1 010 101

Xor. ΠΏΠΎΠ±ΠΈΡ‚ΠΎΠ²ΠΎ суммируСм ΠΏΠΎ ΠΌΠΎΠ΄ΡƒΠ»ΡŽ 2:

11 011 101 11 011 001 0 1 100 000 1 010 011 1 001 100

ΠŸΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π»ΠΈ 48 Π² 32. Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΡƒΠ·Π»ΠΎΠ² Π·Π°ΠΌΠ΅Π½Ρ‹:

11 101 011 1 000 111 11 010 100 11 011

ΠŸΠ΅Ρ€Π΅ΡΡ‚Π°Π½ΠΎΠ²ΠΊΠ° Π±ΠΈΡ‚ Π² ΠΊΠΎΠ½Ρ†Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. ΠŸΠ΅Ρ€Π΅ΡΡ‚Π°Π½ΠΎΠ²ΠΊΠ° P:

11 101 011 11 001 111 11 011 010 1 000

HPart послС ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ. HPart XOR f (LPart, Key):

1 101 001 11 000 010 1 110 111 11 011 110

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΡ Π±Π»ΠΎΠΊΠ°. ΠšΠΎΠ½Π΅Ρ‡Π½Π°Ρ пСрСстановка IP-1:

1 100 100 10 010 111 10 000 101 1 001 011 100 101 11 100 100 11 110 111 10 111 011

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π±Π»ΠΎΠΊΠ° Π±ΠΈΡ‚ Π΄ΠΎ ΠΏΠ΅Ρ€Π΅Π²Π΅Ρ€Ρ‚ывания (исправлСниС Π½Π΅Π΄ΠΎΡ‡Π΅Ρ‚Π° BitArray)… Π‘Π»ΠΎΠΊ № 0:

1 100 100 10 010 111 10 000 101 1 001 011 100 101 11 100 100 11 110 111 10 111 011

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π±Π»ΠΎΠΊΠ° Π±ΠΈΡ‚ послС пСрСвСртывания…:

100 110 11 101 001 10 100 001 11 010 010 10 100 100 100 111 11 101 111 11 011 101

Π˜ΡΡ…ΠΎΠ΄Π½ΠΎΠ΅ Π·Π°ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ сообщСниС: d—…K%Π΄Ρ‡"

ΠšΠ»ΡŽΡ‡: Pavelll

Π˜ΡΡ…ΠΎΠ΄Π½Ρ‹ΠΉ Π±Π»ΠΎΠΊ Π±ΠΈΡ‚… Π‘Π»ΠΎΠΊ № 0:

100 110 11 101 001 10 100 001 11 010 010 10 100 100 100 111 11 101 111 11 011 101

ΠŸΠ΅Ρ€Π΅Π²Π΅Ρ€Π½ΡƒΡ‚Ρ‹Π΅ Π±ΠΈΡ‚Ρ‹ Π² Π±Π»ΠΎΠΊΠ΅…:

1 100 100 10 010 111 10 000 101 1 001 011 100 101 11 100 100 11 110 111 10 111 011

ΠšΠ»ΡŽΡ‡ ΠΈΠ· 56 Π±ΠΈΡ‚:

101 000__11 000__101 110__1 100 110__101 011__110 001__1 011 000__1 101 100__

ΠšΠ»ΡŽΡ‡ ΠΈΠ· 64 Π±ΠΈΡ‚Π°, послС добавлСния Π±ΠΈΡ‚ чСтности:

1 010 000 110 000 1 011 100 11 001 100 1 010 110 1 100 011 10 110 001 11 011 000

**********************Π”Π΅Π¨Π˜Π€Π ΠžΠ’ΠΠΠ˜Π•**********************

ΠΠ°Ρ‡Π°Π»ΡŒΠ½Π°Ρ пСрСстановка IP:

1 101 001 11 000 010 1 110 111 11 011 110 11 100 110 11 110 001 10 001 000 11 001 010

HPart:

1 101 001 11 000 010 1 110 111 11 011 110

LPart:

11 100 110 11 110 001 10 001 000 11 001 010

ΠšΠ»ΡŽΡ‡ 64 Π±ΠΈΡ‚Π°. Π‘ Π±ΠΈΡ‚Π°ΠΌΠΈ чСтности:

1 010 000 110 000 1 011 100 11 001 100 1 010 110 1 100 011 10 110 001 11 011 000

ΠΊΠ»ΡŽΡ‡ (56). ΠŸΠ΅Ρ€Π΅ΡΡ‚Π°Π½ΠΎΠ²ΠΊΠ° Π Π‘1:

11 001 000 10 111 101 1 100 010 11 010 011 1 11 001 000 11 000 111

ΠΊΠ»ΡŽΡ‡ (28C (Left)):

1100 1000 1011 1101 0110 0010 1101

ΠΊΠ»ΡŽΡ‡ (28D (Right)):

0011 0000 0001 1100 1000 1100 0111

Π˜Ρ‚Π΅Ρ€Π°Ρ†ΠΈΡ № 1

ΠšΠ»ΡŽΡ‡ ΠΈΠ· 56 Π±ΠΈΡ‚ послС цикличСского сдвига, итСрация 16:

1 100 100 010 111 100 980 075 429 888 11 000 000 011 100 100 663 181 312

ΠšΠ»ΡŽΡ‡ ΠΈΠ· 48 Π±ΠΈΡ‚. ΠŸΠ΅Ρ€Π΅ΡΡ‚Π°Π½ΠΎΠ²ΠΊΠ° Π Π‘2:

10 101 101 1 110 10 100 011 10 100 101 1 000 101 11 001

LPart, ΠΠ°Ρ‡Π°Π»Π°ΡΡŒ функция ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ f:

11 100 110 11 110 001 10 001 000 11 001 010

ΠŸΠ΅Ρ€Π΅Π²Π΅Π»ΠΈ 32 Π² 48. Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ Π•:

1 110 000 11 010 111 10 100 011 11 000 101 10 110 1 010 101

Xor. ΠΏΠΎΠ±ΠΈΡ‚ΠΎΠ²ΠΎ суммируСм ΠΏΠΎ ΠΌΠΎΠ΄ΡƒΠ»ΡŽ 2:

11 011 101 11 011 001 0 1 100 000 1 010 011 1 001 100

ΠŸΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π»ΠΈ 48 Π² 32. Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΡƒΠ·Π»ΠΎΠ² Π·Π°ΠΌΠ΅Π½Ρ‹:

11 101 011 1 000 111 11 010 100 11 011

ΠŸΠ΅Ρ€Π΅ΡΡ‚Π°Π½ΠΎΠ²ΠΊΠ° Π±ΠΈΡ‚ Π² ΠΊΠΎΠ½Ρ†Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. ΠŸΠ΅Ρ€Π΅ΡΡ‚Π°Π½ΠΎΠ²ΠΊΠ° P:

11 101 011 11 001 111 11 011 010 1 000

HPart послС ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ. HPart XOR f (LPart, Key):

10 000 010 1 101 10 101 101 11 010 110

ПослС обмСна HPart:

11 100 110 11 110 001 10 001 000 11 001 010

ПослС обмСна LPart:

10 000 010 1 101 10 101 101 11 010 110

Π˜Ρ‚Π΅Ρ€Π°Ρ†ΠΈΡ № 16

ΠšΠ»ΡŽΡ‡ ΠΈΠ· 56 Π±ΠΈΡ‚ послС цикличСского сдвига, итСрация 1:

1 001 000 101 111 010 080 195 608 576 110 000 000 111 000 993 746 911 232

ΠšΠ»ΡŽΡ‡ ΠΈΠ· 48 Π±ΠΈΡ‚. ΠŸΠ΅Ρ€Π΅ΡΡ‚Π°Π½ΠΎΠ²ΠΊΠ° Π Π‘2:

1 111 001 10 010 011 1 001 010 10 100 111 11 110 1 000 000

LPart, ΠΠ°Ρ‡Π°Π»Π°ΡΡŒ функция ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ f:

0 111 110 110 100 100

ΠŸΠ΅Ρ€Π΅Π²Π΅Π»ΠΈ 32 Π² 48. Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ Π•:

0 1 11 111 100 0 11 000 001 1 000

Xor. ΠΏΠΎΠ±ΠΈΡ‚ΠΎΠ²ΠΎ суммируСм ΠΏΠΎ ΠΌΠΎΠ΄ΡƒΠ»ΡŽ 2:

1 111 001 10 010 010 10 110 110 10 100 111 11 011 111 1 001 000

ΠŸΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π»ΠΈ 48 Π² 32. Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΡƒΠ·Π»ΠΎΠ² Π·Π°ΠΌΠ΅Π½Ρ‹:

1 110 110 111 110 11 000 110 110

ΠŸΠ΅Ρ€Π΅ΡΡ‚Π°Π½ΠΎΠ²ΠΊΠ° Π±ΠΈΡ‚ Π² ΠΊΠΎΠ½Ρ†Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. ΠŸΠ΅Ρ€Π΅ΡΡ‚Π°Π½ΠΎΠ²ΠΊΠ° P:

1 110 110 1 000 010 10 010 110 1 110 110

HPart послС ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ. HPart XOR f (LPart, Key):

111 111 100 001 110 100 11 010

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π΄Π΅ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΡ Π±Π»ΠΎΠΊΠ°. ΠšΠΎΠ½Π΅Ρ‡Π½Π°Ρ пСрСстановка IP-1:

1 010 000 1 101 001 1 101 110 1 100 001 1 100 101 1 110 110 0 0

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π±Π»ΠΎΠΊΠ° Π±ΠΈΡ‚ Π΄ΠΎ ΠΏΠ΅Ρ€Π΅Π²Π΅Ρ€Ρ‚ывания (исправлСниС Π½Π΅Π΄ΠΎΡ‡Π΅Ρ‚Π° BitArray)… Π‘Π»ΠΎΠΊ № 0:

1 010 000 1 101 001 1 101 110 1 100 001 1 100 101 1 110 110 0 0

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π±Π»ΠΎΠΊΠ° Π±ΠΈΡ‚ послС пСрСвСртывания…:

1 010 10 010 110 1 110 110 10 000 110 10 100 110 1 101 110 0 0

ПослС Π΄Π΅ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΡ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΈ сообщСниС: Pinaev

3. Π Π΅ΠΆΠΈΠΌ DES-CBC

3.1 ΠžΠ±Ρ‰Π°Ρ схСма ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΡ

Π’ ΡΡ‚ΠΎΠΌ Ρ€Π΅ΠΆΠΈΠΌΠ΅ исходный Π½Π°Π±ΠΎΡ€ Π±Π°ΠΉΡ‚ M Ρ‚Π°ΠΊΠΆΠ΅, ΠΊΠ°ΠΊ ΠΈ Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ ECB, разбиваСтся Π½Π° 64-Π±ΠΈΡ‚ΠΎΠ²Ρ‹Π΅ Π±Π»ΠΎΠΊΠΈ: M = M (1)M (2)…M (n). ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ Π±Π»ΠΎΠΊ M (1) складываСтся ΠΏΠΎ ΠΌΠΎΠ΄ΡƒΠ»ΡŽ 2 с 64-Π±ΠΈΡ‚ΠΎΠ²Ρ‹ΠΌ Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹ΠΌ Π²Π΅ΠΊΡ‚ΠΎΡ€ΠΎΠΌ IV, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ мСняСтся Π΅ΠΆΠ΅Π΄Π½Π΅Π²Π½ΠΎ ΠΈ Π΄Π΅Ρ€ΠΆΠΈΡ‚ся Π² ΡΠ΅ΠΊΡ€Π΅Ρ‚Π΅. ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½Π½Π°Ρ сумма Π·Π°Ρ‚Π΅ΠΌ ΡˆΠΈΡ„Ρ€ΡƒΠ΅Ρ‚ΡΡ с ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΊΠ»ΡŽΡ‡Π° DES, извСстного ΠΈ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚Π΅Π»ΡŽ, ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚Π΅Π»ΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ. ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹ΠΉ 64-Π±ΠΈΡ‚ΠΎΠ²Ρ‹ΠΉ Π±Π»ΠΎΠΊ ΡˆΠΈΡ„Ρ€Ρ‚Π΅ΠΊΡΡ‚Π° C (1) складываСтся ΠΏΠΎ ΠΌΠΎΠ΄ΡƒΠ»ΡŽ 2 со Π²Ρ‚ΠΎΡ€Ρ‹ΠΌ Π±Π»ΠΎΠΊΠΎΠΌ исходного тСкста, Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ ΡˆΠΈΡ„Ρ€ΡƒΠ΅Ρ‚ΡΡ ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ся Π²Ρ‚ΠΎΡ€ΠΎΠΉ 64-Π±ΠΈΡ‚ΠΎΠ²Ρ‹ΠΉ Π±Π»ΠΎΠΊ ΡˆΠΈΡ„Ρ€Ρ‚Π΅ΠΊΡΡ‚Π° C (2) ΠΈ Ρ‚. Π΄. ΠŸΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° повторяСтся Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° Π½Π΅ Π±ΡƒΠ΄ΡƒΡ‚ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½Ρ‹ всС Π±Π»ΠΎΠΊΠΈ исходного тСкста (рисунок 5).

Рисунок 5. ΠžΠ±Ρ‰Π°Ρ схСма ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΡ ΠΈ Π΄Π΅ΡˆΠΈΡ„рования Плюс Π΄Π°Π½Π½ΠΎΠ³ΠΎ Ρ€Π΅ΠΆΠΈΠΌΠ° состоит Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ Π½Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ‚ Π½Π°ΠΊΠ°ΠΏΠ»ΠΈΠ²Π°Ρ‚ΡŒΡΡ ошибкам ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π΅. Π‘Π»ΠΎΠΊ M (i) являСтся Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ C (i-1) ΠΈ C (i). ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ ошибка ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π΅ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Ρ‚ ΠΊ ΠΏΠΎΡ‚Π΅Ρ€Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π΄Π²ΡƒΡ… Π±Π»ΠΎΠΊΠΎΠ² исходного тСкста.

3.2 ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΡ ΠΈ Ρ€Π°ΡΡˆΠΈΡ„рования

Π˜ΡΡ…ΠΎΠ΄Π½Ρ‹ΠΉ тСкст: Pinaev

ΠšΠ»ΡŽΡ‡: Pavelll

ΠΠ°Ρ‡Π°Π»ΡŒΠ½Ρ‹ΠΉ Π²Π΅ΠΊΡ‚ΠΎΡ€: 11 111 111

сходный Π±Π»ΠΎΠΊ Π±ΠΈΡ‚… Π‘Π»ΠΎΠΊ № 0:

1 010 10 010 110 1 110 110 10 000 110 10 100 110 1 101 110 0 0

ΠŸΠ΅Ρ€Π΅Π²Π΅Ρ€Π½ΡƒΡ‚Ρ‹Π΅ Π±ΠΈΡ‚Ρ‹ Π² Π±Π»ΠΎΠΊΠ΅…:

1 010 000 1 101 001 1 101 110 1 100 001 1 100 101 1 110 110 0 0

ΠšΠ»ΡŽΡ‡ ΠΈΠ· 56 Π±ΠΈΡ‚:

101 000__11 000__101 110__1 100 110__101 011__110 001__1 011 000__1 101 100__

ΠšΠ»ΡŽΡ‡ ΠΈΠ· 64 Π±ΠΈΡ‚Π°, послС добавлСния Π±ΠΈΡ‚ чСтности:

1 010 000 110 000 1 011 100 11 001 100 1 010 110 1 100 011 10 110 001 11 011 000

**********************Π¨Π˜Π€Π ΠžΠ’ΠΠΠ˜Π•**********************

Π˜ΡΡ…ΠΎΠ΄Π½ΠΎΠ΅ сообщСниС:

1 010 000 1 101 001 1 101 110 1 100 001 1 100 101 1 110 110 0 0

ΠΠ°Ρ‡Π°Π»ΡŒΠ½Ρ‹ΠΉ Π²Π΅ΠΊΡ‚ΠΎΡ€:

110 001 110 001 110 001 110 001 110 001 110 001 110 001 110 001

Π˜ΡΡ…ΠΎΠ΄Π½ΠΎΠ΅ сообщСниС XOR Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹ΠΉ Π²Π΅ΠΊΡ‚ΠΎΡ€:

1 100 001 1 011 000 1 011 111 1 010 000 1 010 100 1 000 111 110 001 110 001

ΠΠ°Ρ‡Π°Π»ΡŒΠ½Π°Ρ пСрСстановка IP:

111 111 11 011 110 110 100 11 100 101 0 11 000 001 110 100 100

HPart:

111 111 11 011 110 110 100 11 100 101

LPart:

0 11 000 001 110 100 100

ΠšΠ»ΡŽΡ‡ 64 Π±ΠΈΡ‚Π°. Π‘ Π±ΠΈΡ‚Π°ΠΌΠΈ чСтности:

1 010 000 110 000 1 011 100 11 001 100 1 010 110 1 100 011 10 110 001 11 011 000

ΠΊΠ»ΡŽΡ‡ (56). ΠŸΠ΅Ρ€Π΅ΡΡ‚Π°Π½ΠΎΠ²ΠΊΠ° Π Π‘1:

11 001 000 10 111 101 1 100 010 11 010 011 1 11 001 000 11 000 111

ΠΊΠ»ΡŽΡ‡ (28C (Left)):

1100 1000 1011 1101 0110 0010 1101

ΠΊΠ»ΡŽΡ‡ (28D (Right)):

0011 0000 0001 1100 1000 1100 0111

Π˜Ρ‚Π΅Ρ€Π°Ρ†ΠΈΡ № 1

ΠšΠ»ΡŽΡ‡ ΠΈΠ· 56 Π±ΠΈΡ‚ послС цикличСского сдвига, итСрация 1:

1 001 000 101 111 010 080 195 608 576 110 000 000 111 000 993 746 911 232

ΠšΠ»ΡŽΡ‡ ΠΈΠ· 48 Π±ΠΈΡ‚. ΠŸΠ΅Ρ€Π΅ΡΡ‚Π°Π½ΠΎΠ²ΠΊΠ° Π Π‘2:

1 111 001 10 010 011 1 001 010 10 100 111 11 110 1 000 000

LPart, ΠΠ°Ρ‡Π°Π»Π°ΡΡŒ функция ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ f:

0 11 000 001 110 100 100

ΠŸΠ΅Ρ€Π΅Π²Π΅Π»ΠΈ 32 Π² 48. Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ Π•:

0 10 110 10 10 000 000 11 000 001 1 000

Xor. ΠΏΠΎΠ±ΠΈΡ‚ΠΎΠ²ΠΎ суммируСм ΠΏΠΎ ΠΌΠΎΠ΄ΡƒΠ»ΡŽ 2:

1 111 001 10 000 101 1 001 000 100 111 11 011 111 1 001 000

ΠŸΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π»ΠΈ 48 Π² 32. Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΡƒΠ·Π»ΠΎΠ² Π·Π°ΠΌΠ΅Π½Ρ‹:

1 111 100 1 010 000 1 001 000 110 110

ΠŸΠ΅Ρ€Π΅ΡΡ‚Π°Π½ΠΎΠ²ΠΊΠ° Π±ΠΈΡ‚ Π² ΠΊΠΎΠ½Ρ†Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. ΠŸΠ΅Ρ€Π΅ΡΡ‚Π°Π½ΠΎΠ²ΠΊΠ° P:

10 110 1 111 10 000 110 110 010

HPart послС ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ. HPart XOR f (LPart, Key):

101 001 11 010 001 10 110 010 11 010 111

ПослС обмСна HPart:

0 11 000 001 110 100 100

ПослС обмСна LPart:

101 001 11 010 001 10 110 010 11 010 111

Π˜Ρ‚Π΅Ρ€Π°Ρ†ΠΈΡ № 16

ΠšΠ»ΡŽΡ‡ ΠΈΠ· 56 Π±ΠΈΡ‚ послС цикличСского сдвига, итСрация 16:

1 100 100 010 111 100 980 075 429 888 11 000 000 011 100 100 663 181 312

ΠšΠ»ΡŽΡ‡ ΠΈΠ· 48 Π±ΠΈΡ‚. ΠŸΠ΅Ρ€Π΅ΡΡ‚Π°Π½ΠΎΠ²ΠΊΠ° Π Π‘2:

10 101 101 1 110 10 100 011 10 100 101 1 000 101 11 001

LPart, ΠΠ°Ρ‡Π°Π»Π°ΡΡŒ функция ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ f:

1 110 011 11 000 111 10 111 111 11 111 000

ΠŸΠ΅Ρ€Π΅Π²Π΅Π»ΠΈ 32 Π² 48. Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ Π•:

111 010 1 111 110 1 111 11 011 111 11 111 111 11 110 000

Xor. ΠΏΠΎΠ±ΠΈΡ‚ΠΎΠ²ΠΎ суммируСм ΠΏΠΎ ΠΌΠΎΠ΄ΡƒΠ»ΡŽ 2:

10 010 111 1 110 000 10 101 100 1 111 010 10 111 010 11 101 001

ΠŸΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π»ΠΈ 48 Π² 32. Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΡƒΠ·Π»ΠΎΠ² Π·Π°ΠΌΠ΅Π½Ρ‹:

10 001 100 111 10 010 101 1 000 100

ΠŸΠ΅Ρ€Π΅ΡΡ‚Π°Π½ΠΎΠ²ΠΊΠ° Π±ΠΈΡ‚ Π² ΠΊΠΎΠ½Ρ†Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. ΠŸΠ΅Ρ€Π΅ΡΡ‚Π°Π½ΠΎΠ²ΠΊΠ° P:

10 100 001 11 011 000 110 000 111 000

HPart послС ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ. HPart XOR f (LPart, Key):

11 111 110 111 111 111 001 11 000 111

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΡ Π±Π»ΠΎΠΊΠ°. ΠšΠΎΠ½Π΅Ρ‡Π½Π°Ρ пСрСстановка IP-1:

10 111 101 11 111 001 1 111 001 1 011 110 11 011 110 11 011 110 11 100 011 1 101 011

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π±Π»ΠΎΠΊΠ° Π±ΠΈΡ‚ Π΄ΠΎ ΠΏΠ΅Ρ€Π΅Π²Π΅Ρ€Ρ‚ывания (исправлСниС Π½Π΅Π΄ΠΎΡ‡Π΅Ρ‚Π° BitArray)… Π‘Π»ΠΎΠΊ № 0:

10 111 101 11 111 001 1 111 001 1 011 110 11 011 110 11 011 110 11 100 011 1 101 011

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π±Π»ΠΎΠΊΠ° Π±ΠΈΡ‚ послС пСрСвСртывания…:

10 111 101 10 011 111 10 011 110 1 111 010 1 111 011 1 111 011 11 000 111 11 010 110

Π˜ΡΡ…ΠΎΠ΄Π½ΠΎΠ΅ Π·Π°ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ сообщСниС:

ΠšΠ»ΡŽΡ‡: Pavelll

ΠΠ°Ρ‡Π°Π»ΡŒΠ½Ρ‹ΠΉ Π²Π΅ΠΊΡ‚ΠΎΡ€: 11 111 111

Π˜ΡΡ…ΠΎΠ΄Π½Ρ‹ΠΉ Π±Π»ΠΎΠΊ Π±ΠΈΡ‚… Π‘Π»ΠΎΠΊ № 0:

10 111 101 10 011 111 10 011 110 1 111 010 1 111 011 1 111 011 11 000 111 11 010 110

ΠŸΠ΅Ρ€Π΅Π²Π΅Ρ€Π½ΡƒΡ‚Ρ‹Π΅ Π±ΠΈΡ‚Ρ‹ Π² Π±Π»ΠΎΠΊΠ΅…:

10 111 101 11 111 001 1 111 001 1 011 110 11 011 110 11 011 110 11 100 011 1 101 011

ΠšΠ»ΡŽΡ‡ ΠΈΠ· 56 Π±ΠΈΡ‚:

101 000__11 000__101 110__1 100 110__101 011__110 001__1 011 000__1 101 100__

ΠšΠ»ΡŽΡ‡ ΠΈΠ· 64 Π±ΠΈΡ‚Π°, послС добавлСния Π±ΠΈΡ‚ чСтности:

1 010 000 110 000 1 011 100 11 001 100 1 010 110 1 100 011 10 110 001 11 011 000

**********************Π”Π΅Π¨Π˜Π€Π ΠžΠ’ΠΠΠ˜Π•**********************

ΠΠ°Ρ‡Π°Π»ΡŒΠ½Π°Ρ пСрСстановка IP:

11 111 110 111 111 111 001 11 000 111 1 110 011 11 000 111 10 111 111 11 111 000

HPart:

11 111 110 111 111 111 001 11 000 111

LPart:

1 110 011 11 000 111 10 111 111 11 111 000

ΠšΠ»ΡŽΡ‡ 64 Π±ΠΈΡ‚Π°. Π‘ Π±ΠΈΡ‚Π°ΠΌΠΈ чСтности:

1 010 000 110 000 1 011 100 11 001 100 1 010 110 1 100 011 10 110 001 11 011 000

ΠΊΠ»ΡŽΡ‡ (56). ΠŸΠ΅Ρ€Π΅ΡΡ‚Π°Π½ΠΎΠ²ΠΊΠ° Π Π‘1:

11 001 000 10 111 101 1 100 010 11 010 011 1 11 001 000 11 000 111

ΠΊΠ»ΡŽΡ‡ (28C (Left)):

1100 1000 1011 1101 0110 0010 1101

ΠΊΠ»ΡŽΡ‡ (28D (Right)):

0011 0000 0001 1100 1000 1100 0111

Π˜Ρ‚Π΅Ρ€Π°Ρ†ΠΈΡ № 1

ΠšΠ»ΡŽΡ‡ ΠΈΠ· 56 Π±ΠΈΡ‚ послС цикличСского сдвига, итСрация 16:

1 100 100 010 111 100 980 075 429 888 11 000 000 011 100 100 663 181 312

ΠšΠ»ΡŽΡ‡ ΠΈΠ· 48 Π±ΠΈΡ‚. ΠŸΠ΅Ρ€Π΅ΡΡ‚Π°Π½ΠΎΠ²ΠΊΠ° Π Π‘2:

10 101 101 1 110 10 100 011 10 100 101 1 000 101 11 001

LPart, ΠΠ°Ρ‡Π°Π»Π°ΡΡŒ функция ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ f:

1 110 011 11 000 111 10 111 111 11 111 000

ΠŸΠ΅Ρ€Π΅Π²Π΅Π»ΠΈ 32 Π² 48. Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ Π•:

111 010 1 111 110 1 111 11 011 111 11 111 111 11 110 000

Xor. ΠΏΠΎΠ±ΠΈΡ‚ΠΎΠ²ΠΎ суммируСм ΠΏΠΎ ΠΌΠΎΠ΄ΡƒΠ»ΡŽ 2:

10 010 111 1 110 000 10 101 100 1 111 010 10 111 010 11 101 001

ΠŸΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π»ΠΈ 48 Π² 32. Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΡƒΠ·Π»ΠΎΠ² Π·Π°ΠΌΠ΅Π½Ρ‹:

10 001 100 111 10 010 101 1 000 100

ΠŸΠ΅Ρ€Π΅ΡΡ‚Π°Π½ΠΎΠ²ΠΊΠ° Π±ΠΈΡ‚ Π² ΠΊΠΎΠ½Ρ†Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. ΠŸΠ΅Ρ€Π΅ΡΡ‚Π°Π½ΠΎΠ²ΠΊΠ° P:

10 100 001 11 011 000 110 000 111 000

HPart послС ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ. HPart XOR f (LPart, Key):

1 011 111 11 100 111 1 001 11 111 111

ПослС обмСна HPart:

1 110 011 11 000 111 10 111 111 11 111 000

ПослС обмСна LPart:

1 011 111 11 100 111 1 001 11 111 111

Π˜Ρ‚Π΅Ρ€Π°Ρ†ΠΈΡ № 16

ΠšΠ»ΡŽΡ‡ ΠΈΠ· 56 Π±ΠΈΡ‚ послС цикличСского сдвига, итСрация 1:

1 001 000 101 111 010 080 195 608 576 110 000 000 111 000 993 746 911 232

ΠšΠ»ΡŽΡ‡ ΠΈΠ· 48 Π±ΠΈΡ‚. ΠŸΠ΅Ρ€Π΅ΡΡ‚Π°Π½ΠΎΠ²ΠΊΠ° Π Π‘2:

1 111 001 10 010 011 1 001 010 10 100 111 11 110 1 000 000

LPart, ΠΠ°Ρ‡Π°Π»Π°ΡΡŒ функция ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ f:

0 11 000 001 110 100 100

ΠŸΠ΅Ρ€Π΅Π²Π΅Π»ΠΈ 32 Π² 48. Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ Π•:

0 10 110 10 10 000 000 11 000 001 1 000

Xor. ΠΏΠΎΠ±ΠΈΡ‚ΠΎΠ²ΠΎ суммируСм ΠΏΠΎ ΠΌΠΎΠ΄ΡƒΠ»ΡŽ 2:

1 111 001 10 000 101 1 001 000 100 111 11 011 111 1 001 000

ΠŸΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π»ΠΈ 48 Π² 32. Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΡƒΠ·Π»ΠΎΠ² Π·Π°ΠΌΠ΅Π½Ρ‹:

1 111 100 1 010 000 1 001 000 110 110

ΠŸΠ΅Ρ€Π΅ΡΡ‚Π°Π½ΠΎΠ²ΠΊΠ° Π±ΠΈΡ‚ Π² ΠΊΠΎΠ½Ρ†Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. ΠŸΠ΅Ρ€Π΅ΡΡ‚Π°Π½ΠΎΠ²ΠΊΠ° P:

10 110 1 111 10 000 110 110 010

HPart послС ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ. HPart XOR f (LPart, Key):

111 111 11 011 110 110 100 11 100 101

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π΄Π΅ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΡ Π±Π»ΠΎΠΊΠ°. ΠšΠΎΠ½Π΅Ρ‡Π½Π°Ρ пСрСстановка IP-1:

1 100 001 1 011 000 1 011 111 1 010 000 1 010 100 1 000 111 110 001 110 001

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π΄Π΅ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΡ XOR Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹ΠΉ Π²Π΅ΠΊΡ‚ΠΎΡ€:

1 010 000 1 101 001 1 101 110 1 100 001 1 100 101 1 110 110 0 0

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π±Π»ΠΎΠΊΠ° Π±ΠΈΡ‚ Π΄ΠΎ ΠΏΠ΅Ρ€Π΅Π²Π΅Ρ€Ρ‚ывания (исправлСниС Π½Π΅Π΄ΠΎΡ‡Π΅Ρ‚Π° BitArray)… Π‘Π»ΠΎΠΊ № 0:

1 010 000 1 101 001 1 101 110 1 100 001 1 100 101 1 110 110 0 0

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π±Π»ΠΎΠΊΠ° Π±ΠΈΡ‚ послС пСрСвСртывания…:

1 010 10 010 110 1 110 110 10 000 110 10 100 110 1 101 110 0 0

ПослС Π΄Π΅ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΡ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΈ сообщСниС: Pinaev

4. Π Π΅ΠΆΠΈΠΌ Ρ‚Ρ€ΠΎΠΉΠ½ΠΎΠΉ DES

Triple DES (3DES) — симмСтричный Π±Π»ΠΎΡ‡Π½Ρ‹ΠΉ ΡˆΠΈΡ„Ρ€, созданный Π£ΠΈΡ‚Ρ„ΠΈΠ»Π΄ΠΎΠΌ Π”ΠΈΡ„Ρ„ΠΈ, ΠœΠ°Ρ€Ρ‚ΠΈΠ½ΠΎΠΌ Π₯Π΅Π»Π»ΠΌΠ°Π½ΠΎΠΌ ΠΈ Π£ΠΎΠ»Ρ‚ΠΎΠΌ Π’Π°Ρ‡ΠΌΠ°Π½Π½ΠΎΠΌ Π² 1978 Π³ΠΎΠ΄Ρƒ Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° DES, с Ρ†Π΅Π»ΡŒΡŽ устранСния Π³Π»Π°Π²Π½ΠΎΠ³ΠΎ нСдостатка послСднСго — ΠΌΠ°Π»ΠΎΠΉ Π΄Π»ΠΈΠ½Ρ‹ ΠΊΠ»ΡŽΡ‡Π° (56 Π±ΠΈΡ‚), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π²Π·Π»ΠΎΠΌΠ°Π½ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ ΠΏΠ΅Ρ€Π΅Π±ΠΎΡ€Π° ΠΊΠ»ΡŽΡ‡Π°. Π‘ΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρ‹ 3DES Π² 3 Ρ€Π°Π·Π° Π½ΠΈΠΆΠ΅, Ρ‡Π΅ΠΌ Ρƒ DES, Π½ΠΎ ΠΊΡ€ΠΈΠΏΡ‚ΠΎΡΡ‚ΠΎΠΉΠΊΠΎΡΡ‚ΡŒ Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ Π²Ρ‹ΡˆΠ΅ — врСмя, Ρ‚Ρ€Π΅Π±ΡƒΠ΅ΠΌΠΎΠ΅ для ΠΊΡ€ΠΈΠΏΡ‚ΠΎΠ°Π½Π°Π»ΠΈΠ·Π° 3DES, ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π² ΠΌΠΈΠ»Π»ΠΈΠ°Ρ€Π΄ Ρ€Π°Π· большС, Ρ‡Π΅ΠΌ врСмя, Π½ΡƒΠΆΠ½ΠΎΠ΅ для вскрытия DES. 3DES ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Ρ‡Π°Ρ‰Π΅, Ρ‡Π΅ΠΌ DES, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π»Π΅Π³ΠΊΠΎ ломаСтся ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ ΡΠ΅Π³ΠΎΠ΄Π½ΡΡˆΠ½ΠΈΡ… Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΉ (Π² 1998 Π³ΠΎΠ΄Ρƒ организация Electronic Frontier Foundation, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€ DES Cracker, вскрыла DES Π·Π° 3 дня). 3DES являСтся простым способом устранСния нСдостатков DES. Алгоритм 3DES построСн Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ DES, поэтому для Π΅Π³ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, созданныС для DES.

3DES с Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌΠΈ ΠΊΠ»ΡŽΡ‡Π°ΠΌΠΈ ΠΈΠΌΠ΅Π΅Ρ‚ Π΄Π»ΠΈΠ½Ρƒ ΠΊΠ»ΡŽΡ‡Π° Ρ€Π°Π²Π½ΡƒΡŽ 168 Π±ΠΈΡ‚, Π½ΠΎ ΠΈΠ·-Π·Π° Π°Ρ‚Π°ΠΊ «Π²ΡΡ‚Ρ€Π΅Ρ‡Π° посСрСдинС» эффСктивная ΠΊΡ€ΠΈΠΏΡ‚ΠΎΡΡ‚ΠΎΠΉΠΊΠΎΡΡ‚ΡŒ составляСт Ρ‚ΠΎΠ»ΡŒΠΊΠΎ 112 Π±ΠΈΡ‚. Π’ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π΅ DES-EDE, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ k1=k3, эффСктивный ΠΊΠ»ΡŽΡ‡ ΠΈΠΌΠ΅Π΅Ρ‚ Π΄Π»ΠΈΠ½Ρƒ 80 Π±ΠΈΡ‚.

Для ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΠΉ Π°Ρ‚Π°ΠΊΠΈ Π½Π° 3DES потрСбуСтся ΠΎΠΊΠΎΠ»ΠΎ Π±ΠΈΡ‚ извСстного ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΎΠ³ΠΎ тСкста, шагов, Ρ†ΠΈΠΊΠ»ΠΎΠ² DES-ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΡ ΠΈ Π±ΠΈΡ‚ памяти.

4.1 ΠžΠ±Ρ‰ΠΈΠ΅ схСмы ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΡ

Π‘Ρ…Π΅ΠΌΠ° Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° (рисунок 6) 3DES ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‚Π°ΠΊΠΎΠΉ Π²ΠΈΠ΄:

Π³Π΄Π΅ — ΠΊΠ»ΡŽΡ‡ΠΈ для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ DES-шага, M — Π²Ρ…ΠΎΠ΄Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½ΡƒΠΆΠ½ΠΎ ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Ρ‚ΡŒ. Π­Ρ‚ΠΎ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ извСстСн ΠΊΠ°ΠΊ Π² Π•Π•Π•, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Ρ‚Ρ€ΠΈ DES ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ.

Рисунок 6. Π‘Ρ…Π΅ΠΌΠ° Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° 3DES

БущСствуСт 3 Ρ‚ΠΈΠΏΠ° Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° 3DES:

Β· DES-EEE3: ШифруСтся Ρ‚Ρ€ΠΈ Ρ€Π°Π·Π° с Ρ‚рСмя Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ ΠΊΠ»ΡŽΡ‡Π°ΠΌΠΈ (ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΠ΅-ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΠ΅-ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΠ΅).

Β· DES-EDE3: 3DES ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ ΡˆΠΈΡ„Ρ€ΠΎΠ²ΠΊΠ°-Ρ€Π°ΡΡˆΠΈΡ„Ρ€ΠΎΠ²ΠΊΠ°-ΡˆΠΈΡ„Ρ€ΠΎΠ²ΠΊΠ° с Ρ‚рСмя Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ ΠΊΠ»ΡŽΡ‡Π°ΠΌΠΈ.

Β· DES-EEE2 ΠΈ DES-EDE2: Как ΠΈ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠ΅, Π·Π° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ Π½Π° ΠΏΠ΅Ρ€Π²ΠΎΠΌ ΠΈ Ρ‚Ρ€Π΅Ρ‚ΡŒΠ΅ΠΌ шагС ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ΠΉ ΠΊΠ»ΡŽΡ‡.

Π‘Π°ΠΌΡ‹ΠΉ популярная Ρ€Π°Π·Π½ΠΎΠ²ΠΈΠ΄Π½ΠΎΡΡ‚ΡŒ 3DES — это DES-EDE3, для Π½Π΅Π³ΠΎ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ выглядит Ρ‚Π°ΠΊ:

Π¨ΠΈΡ„Ρ€ΠΎΠ²ΠΊΠ°:

Π Π°ΡΡˆΠΈΡ„Ρ€ΠΎΠ²ΠΊΠ°:

4.2. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΡ ΠΈ Π΄Π΅ΡˆΠΈΡ„рования ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ Triple DES EDE3

Π˜ΡΡ…ΠΎΠ΄Π½Ρ‹ΠΉ тСкст: Pinaev

ΠšΠ»ΡŽΡ‡: 1 234 567

Π’Ρ‚ΠΎΡ€ΠΎΠΉ ΠΊΠ»ΡŽΡ‡: 2 345 678

Π’Ρ€Π΅Ρ‚ΠΈΠΉ ΠΊΠ»ΡŽΡ‡: 3 456 789

Π˜ΡΡ…ΠΎΠ΄Π½Ρ‹ΠΉ Π±Π»ΠΎΠΊ Π±ΠΈΡ‚… Π‘Π»ΠΎΠΊ № 0:

1 010 10 010 110 1 110 110 10 000 110 10 100 110 1 101 110 0 0

ΠŸΠ΅Ρ€Π΅Π²Π΅Ρ€Π½ΡƒΡ‚Ρ‹Π΅ Π±ΠΈΡ‚Ρ‹ Π² Π±Π»ΠΎΠΊΠ΅…:

1 010 000 1 101 001 1 101 110 1 100 001 1 100 101 1 110 110 0 0

ΠšΠ»ΡŽΡ‡ ΠΈΠ· 56 Π±ΠΈΡ‚:

11 000__1 001 100__1 000 110__110 011__100 001__1 010 100__1 101 100__110 111__

ΠšΠ»ΡŽΡ‡ ΠΈΠ· 64 Π±ΠΈΡ‚Π°, послС добавлСния Π±ΠΈΡ‚ чСтности:

110 000 10 011 001 10 001 101 1 100 110 1 000 010 10 101 001 11 011 000 1 101 111

**********************Π¨Π˜Π€Π ΠžΠ’ΠΠΠ˜Π•**********************

Π˜ΡΡ…ΠΎΠ΄Π½ΠΎΠ΅ сообщСниС:

1 010 000 1 101 001 1 101 110 1 100 001 1 100 101 1 110 110 0 0

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΡ Π±Π»ΠΎΠΊΠ°. ΠšΠΎΠ½Π΅Ρ‡Π½Π°Ρ пСрСстановка IP-1:

10 011 10 010 001 11 010 011 11 111 011 10 011 110 11 011 11 011 101 11 111

Π”Π΅ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΠ΅ со Π²Ρ‚ΠΎΡ€Ρ‹ΠΌ ΠΊΠ»ΡŽΡ‡ΠΎΠΌ: 2 345 678

ΠšΠ»ΡŽΡ‡ 64 Π±ΠΈΡ‚Π°. Π‘ Π±ΠΈΡ‚Π°ΠΌΠΈ чСтности:

110 011 11 000 11 001 100 10 000 111 1 010 011 10 110 001 11 011 101 1 110 001

ΠΊΠ»ΡŽΡ‡ (56). ΠŸΠ΅Ρ€Π΅ΡΡ‚Π°Π½ΠΎΠ²ΠΊΠ° Π Π‘1:

1 101 100 11 010 100 10 100 001 11 110 001 10 010 100 11 000 100 1 100 011

**********************Π”Π΅Π¨Π˜Π€Π ΠžΠ’ΠΠΠ˜Π•**********************

ΠΠ°Ρ‡Π°Π»ΡŒΠ½Π°Ρ пСрСстановка IP:

10 011 011 10 111 001 10 100 000 1 001 100 1 111 1 001 000 11 001 011 11 011

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π΄Π΅ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΡ Π±Π»ΠΎΠΊΠ°. ΠšΠΎΠ½Π΅Ρ‡Π½Π°Ρ пСрСстановка IP-1:

10 010 010 11 011 011 1 11 011 110 110 011 10 101 011 11 000 11 001 001

Π¨ΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΠ΅ Ρ‚Ρ€Π΅Ρ‚ΡŒΠΈΠΌ ΠΊΠ»ΡŽΡ‡ΠΎΠΌ: 3 456 789

ΠšΠ»ΡŽΡ‡ 64 Π±ΠΈΡ‚Π°. Π‘ Π±ΠΈΡ‚Π°ΠΌΠΈ чСтности:

110 011 10 011 010 1 100 10 100 110 1 100 011 10 111 000 11 100 001 1 110 010

ΠΊΠ»ΡŽΡ‡ (56). ΠŸΠ΅Ρ€Π΅ΡΡ‚Π°Π½ΠΎΠ²ΠΊΠ° Π Π‘1:

1 101 010 11 010 000 11 111 001 10 101 001 10 110 000 11 000 010 1 100 011 11 011

**********************Π¨Π˜Π€Π ΠžΠ’ΠΠΠ˜Π•**********************

Π˜ΡΡ…ΠΎΠ΄Π½ΠΎΠ΅ сообщСниС:

10 010 010 11 011 011 1 11 011 110 110 011 10 101 011 11 000 11 001 001

ΠΠ°Ρ‡Π°Π»ΡŒΠ½Π°Ρ пСрСстановка IP:

10 001 010 1 011 011 1 000 10 110 110 10 101 011 110 000 11 101 010 111 011

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΡ Π±Π»ΠΎΠΊΠ°. ΠšΠΎΠ½Π΅Ρ‡Π½Π°Ρ пСрСстановка IP-1:

11 001 111 11 110 100 11 011 000 1 101 1 100 110 101 111 110 111 1 100 101

Π—Π°ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ сообщСниС: ΠŸΡ„Π¨f/7e

Π˜ΡΡ…ΠΎΠ΄Π½ΠΎΠ΅ Π·Π°ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ сообщСниС: ΠŸΡ„Π¨f/7e

ΠšΠ»ΡŽΡ‡: 1 234 567

Π’Ρ‚ΠΎΡ€ΠΎΠΉ ΠΊΠ»ΡŽΡ‡: 2 345 678

Π’Ρ€Π΅Ρ‚ΠΈΠΉ ΠΊΠ»ΡŽΡ‡: 3 456 789

Π˜ΡΡ…ΠΎΠ΄Π½Ρ‹ΠΉ Π±Π»ΠΎΠΊ Π±ΠΈΡ‚… Π‘Π»ΠΎΠΊ № 0:

11 110 011 101 111 11 011 10 110 000 1 100 110 11 110 100 11 101 100 10 100 110

ΠŸΠ΅Ρ€Π΅Π²Π΅Ρ€Π½ΡƒΡ‚Ρ‹Π΅ Π±ΠΈΡ‚Ρ‹ Π² Π±Π»ΠΎΠΊΠ΅…:

11 001 111 11 110 100 11 011 000 1 101 1 100 110 101 111 110 111 1 100 101

ΠšΠ»ΡŽΡ‡ ΠΈΠ· 56 Π±ΠΈΡ‚:

11 001__1 001 101__110__1 010 011__110 001__1 011 100__1 110 000__111 001__

ΠšΠ»ΡŽΡ‡ ΠΈΠ· 64 Π±ΠΈΡ‚Π°, послС добавлСния Π±ΠΈΡ‚ чСтности:

110 011 10 011 010 1 100 10 100 110 1 100 011 10 111 000 11 100 001 1 110 010

**********************Π”Π΅Π¨Π˜Π€Π ΠžΠ’ΠΠΠ˜Π•**********************

ΠΠ°Ρ‡Π°Π»ΡŒΠ½Π°Ρ пСрСстановка IP:

10 010 111 1 000 110 11 111 011 11 101 001 111 11 110 010 101 101 1 110 001

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π΄Π΅ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΡ Π±Π»ΠΎΠΊΠ°. ΠšΠΎΠ½Π΅Ρ‡Π½Π°Ρ пСрСстановка IP-1:

10 010 010 11 011 011 1 11 011 110 110 011 10 101 011 11 000 11 001 001

Π¨ΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π²Ρ‚ΠΎΡ€Ρ‹ΠΌ ΠΊΠ»ΡŽΡ‡ΠΎΠΌ: 2 345 678

ΠšΠ»ΡŽΡ‡ 64 Π±ΠΈΡ‚Π°. Π‘ Π±ΠΈΡ‚Π°ΠΌΠΈ чСтности:

110 011 11 000 11 001 100 10 000 111 1 010 011 10 110 001 11 011 101 1 110 001

ΠΊΠ»ΡŽΡ‡ (56). ΠŸΠ΅Ρ€Π΅ΡΡ‚Π°Π½ΠΎΠ²ΠΊΠ° Π Π‘1:

1 101 100 11 010 100 10 100 001 11 110 001 10 010 100 11 000 100 1 100 011

**********************Π¨Π˜Π€Π ΠžΠ’ΠΠΠ˜Π•**********************

Π˜ΡΡ…ΠΎΠ΄Π½ΠΎΠ΅ сообщСниС:

10 010 010 11 011 011 1 11 011 110 110 011 10 101 011 11 000 11 001 001

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΡ Π±Π»ΠΎΠΊΠ°. ΠšΠΎΠ½Π΅Ρ‡Π½Π°Ρ пСрСстановка IP-1:

10 011 10 010 001 11 010 011 11 111 011 10 011 110 11 011 11 011 101 11 111

Π”Π΅ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΠ΅ Ρ‚Ρ€Π΅Ρ‚ΡŒΠΈΠΌ ΠΊΠ»ΡŽΡ‡ΠΎΠΌ: 3 456 789

ΠšΠ»ΡŽΡ‡ 64 Π±ΠΈΡ‚Π°. Π‘ Π±ΠΈΡ‚Π°ΠΌΠΈ чСтности:

110 000 10 011 001 10 001 101 1 100 110 1 000 010 10 101 001 11 011 000 1 101 111

ΠΊΠ»ΡŽΡ‡ (56). ΠŸΠ΅Ρ€Π΅ΡΡ‚Π°Π½ΠΎΠ²ΠΊΠ° Π Π‘1:

1 100 110 11 011 000 10 101 001 1 001 001 10 001 000 11 001 110 1 100 011

**********************Π”Π΅Π¨Π˜Π€Π ΠžΠ’ΠΠΠ˜Π•**********************

ΠΠ°Ρ‡Π°Π»ΡŒΠ½Π°Ρ пСрСстановка IP:

1 001 100 11 111 111 11 010 000 11 101 111 1 011 110 1 000 11 111 000 10 111 101

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π΄Π΅ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΡ Π±Π»ΠΎΠΊΠ°. ΠšΠΎΠ½Π΅Ρ‡Π½Π°Ρ пСрСстановка IP-1:

1 010 000 1 101 001 1 101 110 1 100 001 1 100 101 1 110 110 0 0

ПослС Π΄Π΅ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΡ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΈ сообщСниС: Pinaev

5. Руководство ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹

5.1 ΠžΠ±Ρ‰ΠΈΠ΅ свСдСния

Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ — ПинаСв ПавСл Π‘Π΅Ρ€Π³Π΅Π΅Π²ΠΈΡ‡, студСнт Π³Ρ€ΡƒΠΏΠΏΡ‹ 23К.

Π”Π°Ρ‚Π° создания — июнь 2013 Π³ΠΎΠ΄Π°.

Π―Π·Ρ‹ΠΊ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ — Π‘#.

ΠšΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ ΠΏΠ°ΠΊΠ΅Ρ‚Π° — Ρ„Π°ΠΉΠ»: DES.exe.

5.2 НазначСниС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π° для ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΡ ΠΈ Π΄Π΅ΡˆΠΈΡ„рования тСкстовых сообщСний с ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΡ DES. Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΡˆΠ΅ΡΡ‚ΡŒΡŽ разновидностями Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° DES: DES ECB, DES CBC, Triple DES EEE3, Triple DES EEE2, Triple DES EDE3, Triple DES EDE2.

5.3 Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ тСхничСскиС срСдства

ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Π°Ρ систСма — Windows XP, Vista, 7, 8

Π‘Π²ΠΎΠ±ΠΎΠ΄Π½ΠΎΠ΅ мСсто Π½Π° ΠΆΠ΅ΡΡ‚ΠΊΠΎΠΌ дискС — Π½Π΅ ΠΌΠ΅Π½Π΅Π΅ 50 Кб

ОбъСм ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠΉ памяти — 128 Мб ΠΈ Π±ΠΎΠ»Π΅Π΅ ΠŸΡ€ΠΎΡ†Π΅ΡΡΠΎΡ€ Intel Core i3 ΠΈ Π²Ρ‹ΡˆΠ΅ Π’ΠΈΠ΄Π΅ΠΎΠΊΠ°Ρ€Ρ‚Π° 512 Мб

5.4 Π’Ρ…ΠΎΠ΄Π½Ρ‹Π΅ ΠΈ Π²Ρ‹Ρ…ΠΎΠ΄Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅

Π’Ρ…ΠΎΠ΄Π½Ρ‹ΠΌΠΈ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΡˆΠΈΡ„Ρ€ΡƒΠ΅ΠΌΠΎΠ΅ ΠΈ Π΄Π΅ΡˆΠΈΡ„Ρ€ΡƒΠ΅ΠΌΠΎΠ΅ сообщСниС, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π·Π°Π΄Π°ΡŽΡ‚ΡΡ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΎΠΉ.

Π’Ρ‹Ρ…ΠΎΠ΄Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ — Π·Π°ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΠΈ Ρ€Π°ΡΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ тСкстовоС сообщСниС.

5.5 Π’Π²ΠΎΠ΄ Π² Π΄Π΅ΠΉΡΡ‚Π²ΠΈΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ срСдства

Π”Π°Π½Π½Ρ‹ΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΉ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ Π½Π΅ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ установки Π½Π° ΠŸΠš. Для запуска ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π²Π° Ρ€Π°Π·Π° Ρ‰Π΅Π»ΠΊΠ½ΡƒΡ‚ΡŒ Π»Π΅Π²ΠΎΠΉ ΠΊΠ½ΠΎΠΏΠΊΠΎΠΉ ΠΌΡ‹ΡˆΠΈ ΠΏΠΎ ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΠΎΠΌΡƒ Ρ„Π°ΠΉΠ»Ρƒ DES.exe.

ПослС запуска ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ откроСтся ΠΎΠΊΠ½ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ (рисунок 7).

Рисунок 7. Π“Π»Π°Π²Π½ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹

5.5.1 Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡ

На Π³Π»Π°Π²Π½ΠΎΠΌ ΠΎΠΊΠ½Π΅ располоТСно чСкбоксы для Π²Ρ‹Π±ΠΎΡ€Π° Ρ‚ΠΈΠΏΠ° ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΡ, Π° Ρ‚Π°ΠΊΠΆΠ΅ тСкстовыС поля Π²Π²ΠΎΠ΄Π° исходного сообщСния, ΠΊΠ»ΡŽΡ‡Π΅ΠΉ, Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ Π²Π΅ΠΊΡ‚ΠΎΡ€Π°. Π’ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΠ²ΡƒΡŽΡ‰ΠΈΡ… полях ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ (Π΄Π΅)ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΡ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Ρ‹ Ссли Π±ΡƒΠ΄ΡƒΡ‚ Π½Π°ΠΆΠ°Ρ‚Ρ‹ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΠ²ΡƒΡŽΡ‰ΠΈΠ΅ ΠΊΠ½ΠΎΠΏΠΊΠΈ. ΠŸΡ€ΠΈΡΡƒΡ‚ΡΡ‚Π²ΡƒΠ΅Ρ‚ ΠΎΠΊΠ½ΠΎ отобраТСния процСсса (Π΄Π΅)ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΡ.

5.5.2 ИспользованиС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ срСдства

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ:

Β· Π¨ΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ Π΄Π΅ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΠ΅ тСкста ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ DES ECB (рисунок 8);

Β· Π¨ΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ Π΄Π΅ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΠ΅ тСкста ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ DES CBC (рисунок 9);

Β· Π¨ΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ Π΄Π΅ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΠ΅ тСкста ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ Triple DES EEE3 (рисунок 10);

Β· Π¨ΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ Π΄Π΅ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΠ΅ тСкста ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ Triple DES EDE3 (рисунок 11);

Β· Π¨ΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ Π΄Π΅ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΠ΅ тСкста ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ Triple DES EEE2 (рисунок 12);

Β· Π¨ΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ Π΄Π΅ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΠ΅ тСкста ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ Triple DES EDE2 (рисунок 13);

Рисунок 8. Π¨ΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ Π΄Π΅ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΠ΅ тСкста ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ DES ECB

Рисунок 9. Π¨ΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ Π΄Π΅ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΠ΅ тСкста ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ DES CBC

Рисунок 10. Π¨ΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ Π΄Π΅ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΠ΅ тСкста ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ Triple DES EEE3

Рисунок 11. Π¨ΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ Π΄Π΅ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΠ΅ тСкста ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ Triple DES EDE3

Рисунок 12. Π¨ΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ Π΄Π΅ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΠ΅ тСкста ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ Triple DES EEE2

Рисунок 13. Π¨ΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ Π΄Π΅ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΠ΅ тСкста ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ Triple DES EDE2

криптографичСский ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΉ ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΠ΅ тСкст

6. Код ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹

using System;

using System. Collections;

using System.Collections.Generic;

using System. ComponentModel;

using System. Data;

using System. Drawing;

using System. Linq;

using System. Text;

using System.Windows.Forms;

namespace DES

{

public partial class Form1: Form

{

public Form1()

{

InitializeComponent ();

}

public string bufff;

public string bufff1;

public string IshSoobshen;

public byte[] T;

public bool Shifr;

public BitArray btIsh = new BitArray (64);

public BitArray[] btTransp;

public BitArray bt1;

public BitArray bt2;

public BitArray btKluch1;

public BitArray btKluch2;

public BitArray[] KLUCHI;

public BitArray[] KLUCHIPREDVORITELNII;

public BitArray kluchC0;

public BitArray kluchD0;

public BitArray kluchC1;

public BitArray kluchD1;

public BitArray[] L0;

public BitArray[] H0;

public BitArray[] L1;

public BitArray[] H1;

public BitArray[] LPart;

public BitArray[] HPart;

public BitArray[] HHH;

public BitArray[] b2b3b4b5;

public BitArray[] b1b6;

public BitArray[] TTT;

public BitArray HShtrih;

public BitArray Funk;

public BitArray[] ItogPredv;

public BitArray[] Itog;

public BitArray[] CBCItog;

public int[] NStr;

public int[] NStolb;

public int[,] UzelZam;

public int buf;

public int buf2;

public BitArray buf3;

public bool steck;

public bool kluch;

public bool vector;

public BitArray Vekt;

public bool EEE2;

public bool EEE3;

public bool EDE2;

public bool EDE3;

public int[] IP = {58,50,42,34,26,18,10,2,

60,52,44,36,28,20,12,4,

62,54,46,38,30,22,14,6,

64,56,48,40,32,24,16,8,

57,49,41,33,25,17,9,1,

59,51,43,35,27,19,11,3,

61,53,45,37,29,21,13,5,

63,55,47,39,31,23,15,7};

public int[] IP1 = {40,8,48,16,56,24,64,32,

39,7,47,15,55,23,63,31,

38,6,46,14,54,22,62,30,

37,5,45,13,53,21,61,29,

36,4,44,12,52,20,60,28,

35,3,43,11,51,19,59,27,

34,2,42,10,50,18,58,26,

33,1,41,9,49,17,57,25};

public int[] E = {32,1,2,3,4,5,

4,5,6,7,8,9,

8,9,10,11,12,13,

12,13,14,15,16,17,

16,17,18,19,20,21,

20,21,22,23,24,25,

24,25,26,27,28,29,

28,29,30,31,32,1};

public int[] P = {16,7,20,21,29,12,28,17,

1,15,23,26,5,18,31,10,

2,8,24,14,32,27,3,9,

19,13,30,6,22,11,4,25};

public int[] S10 = { 14, 4, 13, 1, 2, 15, 11, 8, 3, 10, 6, 12, 5, 9, 0, 7 };

public int[] S11 = { 0, 15, 7, 4, 14, 2, 13, 1, 10, 6, 12, 11, 9, 5, 3, 8 };

public int[] S12 = { 4, 1, 14, 8, 13, 6, 2, 11, 15, 12, 9, 7, 3, 10, 5, 0 };

public int[] S13 = { 15, 12, 8, 2, 4, 9, 1, 7, 5, 11, 3, 14, 10, 0, 6, 13 };

public int[] S20 = { 15, 1, 8, 14, 6, 11, 3, 4, 9, 7, 2, 13, 12, 0, 5, 10 };

public int[] S21 = { 3, 13, 4, 7, 15, 2, 8, 14, 12, 0, 1, 10, 6, 9, 11, 5 };

public int[] S22 = { 0, 14, 7, 11, 10, 4, 13, 1, 5, 8, 12, 6, 9, 3, 2, 15 };

public int[] S23 = { 13, 8, 10, 1, 3, 15, 4, 2, 11, 6, 7, 12, 0, 5, 14, 9 };

public int[] S30 = { 10, 0, 9, 14, 6, 3, 15, 5, 1, 13, 12, 7, 11, 4, 2, 8 };

public int[] S31 = { 13, 7, 0, 9, 3, 4, 6, 10, 2, 8, 5, 14, 12, 11, 15, 1 };

public int[] S32 = { 13, 6, 4, 9, 8, 15, 3, 0, 11, 1, 2, 12, 5, 10, 14, 7 };

public int[] S33 = { 1, 10, 13, 0, 6, 9, 8, 7, 4, 15, 14, 3, 11, 5, 2, 12 };

public int[] S40 = { 7, 13, 14, 3, 0, 6, 9, 10, 1, 2, 8, 5, 11, 12, 4, 15 };

public int[] S41 = { 13, 8, 11, 5, 6, 15, 0, 3, 4, 7, 2, 12, 1, 10, 14, 9 };

public int[] S42 = { 10, 6, 9, 0, 12, 11, 7, 13, 15, 1, 3, 14, 5, 2, 8, 4 };

public int[] S43 = { 3, 15, 0, 6, 10, 1, 13, 8, 9, 4, 5, 11, 12, 7, 2, 14 };

public int[] S50 = { 2, 12, 4, 1, 7, 10, 11, 6, 8, 5, 3, 15, 13, 0, 14, 9 };

public int[] S51 = { 14, 11, 2, 12, 4, 7, 13, 1, 5, 0, 15, 10, 3, 9, 8, 6 };

public int[] S52 = { 4, 2, 1, 11, 10, 13, 7, 8, 15, 9, 12, 5, 6, 3, 0, 14 };

public int[] S53 = { 11, 8, 12, 7, 1, 14, 2, 13, 6, 15, 0, 9, 10, 4, 5, 3 };

public int[] S60 = { 12, 1, 10, 15, 9, 2, 6, 8, 0, 13, 3, 4, 14, 7, 5, 11 };

public int[] S61 = { 10, 15, 4, 2, 7, 12, 9, 5, 6, 1, 13, 14, 0, 11, 3, 8 };

public int[] S62 = { 9, 14, 15, 5, 2, 8, 12, 3, 7, 0, 4, 10, 1, 13, 11, 6 };

public int[] S63 = { 4, 3, 2, 12, 9, 5, 15, 10, 11, 14, 1, 7, 6, 0, 8, 13 };

public int[] S70 = { 4, 11, 2, 14, 15, 0, 8, 13, 3, 12, 9, 7, 5, 10, 6, 1 };

public int[] S71 = { 13, 0, 11, 7, 4, 9, 1, 10, 14, 3, 5, 12, 2, 15, 8, 6 };

public int[] S72 = { 1, 4, 11, 13, 12, 3, 7, 14, 10, 15, 6, 8, 0, 5, 9, 2 };

public int[] S73 = { 6, 11, 13, 8, 1, 4, 10, 7, 9, 5, 0, 15, 14, 2, 3, 12 };

public int[] S80 = { 13, 2, 8, 4, 6, 15, 11, 1, 10, 9, 3, 14, 5, 0, 12, 7 };

public int[] S81 = { 1, 15, 13, 8, 10, 3, 7, 4, 12, 5, 6, 11, 0, 14, 9, 2 };

public int[] S82 = { 7, 11, 4, 1, 9, 12, 14, 2, 0, 6, 10, 13, 15, 3, 5, 8 };

public int[] S83 = { 2, 1, 14, 7, 4, 10, 8, 13, 15, 12, 9, 0, 3, 5, 6, 11 };

public int[] PC1 = { 57,49,41,33,25,17,9,

1,58,50,42,34,26,18,

10,2,59,51,43,35,27,

19,11,3,60,52,44,36,

63,55,47,39,31,23,15,

7,62,54,46,38,30,22,

14,6,61,53,45,37,29,

21,13,5,28,20,12,4};

public int[] PC2 = { 14,17,11,24,1,5,

3,28,15,6,21,10,

23,19,12,4,26,8,

16,7,27,20,13,2,

41,52,31,37,47,55,

30,40,51,45,33,48,

44,49,39,56,34,53,

46,42,50,36,29,32};

public int[] SDVIGG = { 1,1,2,2,2,2,2,2,1,2,2,2,2,2,2,1};

//Π²Π΅ΠΊΡ‚ΠΎΡ€ Π² Π±ΠΈΡ‚Ρ‹

public void VectorToByte ()

{

buf = 0;

vector = false;

if (IshSoobshen.Length == 8)

{

//ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ΠΈΠΌ Π² Π±Π°ΠΉΡ‚Ρ‹

vector = true;

byte[] T = Encoding.Default.GetBytes (IshSoobshen);

//Π² Π±ΠΈΡ‚Ρ‹

Vekt = new BitArray (T);

////ΠΏΠ΅Ρ€Π΅Π²ΠΎΡ€Π°Ρ‡ΠΈΠ²Π°Π΅ΠΌ

for (int g = 0; g < Vekt. Length / 8; g++)

{

buf = 0;

for (int i = 0; i < 4; i++)

{

steck = Vekt[i + (g * 8)];

Vekt[i + (g * 8)] = Vekt[i + (g * 8) + 7 — buf];

Vekt[i + (g * 8) + 7 — buf] = steck;

buf += 2;

}

}

}

else

{

MessageBox.Show («ΠΠ΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ Π²Π΅ΠΊΡ‚ΠΎΡ€»);

kluch = false;

}

}

//ΠΊΠ»ΡŽΡ‡ Π² Π±ΠΈΡ‚Ρ‹

public void KeyToByte ()

{

buf = 0;

kluch = false;

if (IshSoobshen.Length == 7)

{

//ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ΠΈΠΌ Π² Π±Π°ΠΉΡ‚Ρ‹

kluch = true;

byte[] T = Encoding.Default.GetBytes (IshSoobshen);

//Π² Π±ΠΈΡ‚Ρ‹

btKluch1 = new BitArray (T);

////ΠΏΠ΅Ρ€Π΅Π²ΠΎΡ€Π°Ρ‡ΠΈΠ²Π°Π΅ΠΌ

for (int g = 0; g < btKluch1. Length / 8; g++)

{

buf = 0;

for (int i = 0; i < 4; i++)

{

steck = btKluch1[i + (g * 8)];

btKluch1[i + (g * 8)] = btKluch1[i + (g * 8) + 7 — buf];

btKluch1[i + (g * 8) + 7 — buf] = steck;

buf += 2;

}

}

}

else

{

MessageBox.Show («ΠΠ΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ ΠΊΠ»ΡŽΡ‡»);

kluch = false;

}

}

//сообщСниС Π² Π±ΠΈΡ‚Ρ‹

public void MessToByte ()

{

buf = 0;

//ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ΠΈΠΌ Π² Π±Π°ΠΉΡ‚Ρ‹

byte[] T = Encoding.Default.GetBytes (IshSoobshen);

//Π² Π±ΠΈΡ‚Ρ‹

bt2 = new BitArray (T);

if (bt2.Length % 64≠ 0)

{//провСряСм ΠΊΡ€Π°Ρ‚Π½ΠΎΡΡ‚ΡŒ 64 Π±ΠΈΡ‚

bt1 = new BitArray (bt2.Length + (64 — bt2. Length % 64));

for (int y = 0; y < bt2. Length; y++)

{

bt1[y] = bt2[y];

}

}

else

{

bt1 = new BitArray (bt2.Length);

for (int y = 0; y < bt2. Length; y++)

{

bt1[y] = bt2[y];

}

}

//мСняСм мСстами Π±ΠΈΡ‚Ρ‹ Π² Π±Π»ΠΎΠΊΠ°Ρ…

for (int g = 0; g < bt1. Length / 8; g++)

{

buf = 0;

for (int i = 0; i < 4; i++)

{

steck = bt1[i + (g * 8)];

bt1[i + (g * 8)] = bt1[i + (g * 8) + 7 — buf];

bt1[i + (g * 8) + 7 — buf] = steck;

buf += 2;

}

}

}

//Π΄Π΅Π»ΠΈΠΌ сообщСниС Π½Π° Π±Π»ΠΎΠΊΠΈ ΠΏΠΎ 8 Π±ΠΈΡ‚

public void CutForBlock ()

{

//ΠΊΠΎΠ»-Π²ΠΎ Π±Π»ΠΎΠΊΠΎΠ²

buf = bt1. Length / 64;

//Π΄Π΅Π»ΠΈΠΌ Π½Π° ΠΏΠ΅Ρ€Π΅ΡΡ‚Π°Π½ΠΎΠ²Π»Π΅Π½Π½Ρ‹Π΅ Π±Π»ΠΎΠΊΠΈ

btTransp = new BitArray[buf];

for (int i = 0; i < buf; i++)

{

btTransp[i] = new BitArray (64);

}

buf2 = 0;

for (int g = 0; g < buf; g++)

{

for (int h = g * 64; h < (g + 1) * 64; h++)

{

if (g == 0)

{

btTransp[buf2][h] = bt1[IP[h] - 1];

}

else

{

btTransp[buf2][h — g * 64] = bt1[IP[h — g * 64] - 1 + g * 64];

}

}

buf2++;

}

}

//дополняСм ΠΊΠ»ΡŽΡ‡ Π±ΠΈΡ‚ΠΎΠΌ чСтности

public void KeyTo64()

{

// Π±ΠΈΡ‚ чСтности

buf = 0;

buf2 = 0;

buf3 = new BitArray (8);

for (int y = 0; y < 8; y++)

{

for (int u = 0; u < 7; u++)

{

if (btKluch1[y * 7 + u] == true)

{

buf++;

}

}

if ((buf % 2 == 0) || (buf == 0))

{

buf3[buf2] = false;

}

else { buf3[buf2] = true; }

buf = 0;

buf2++;

}

//заносим Π±ΠΈΡ‚ чСтности Π² ΠΊΠ»ΡŽΡ‡

buf = 0;

buf2 = 0;

btKluch2 = new BitArray (64);

for (int k = 0; k < 64; k++)

{

if ((k == 7) || (k == 15) || (k == 23) || (k == 31) || (k == 39) || (k == 47) || (k == 55) || (k == 63))

{

btKluch2[k] = buf3[buf2];

buf2++;

}

else

{

btKluch2[k] = btKluch1[buf];

buf++;

}

}

}

//Ρ€Π°Π·Π±ΠΈΠ²Π°Π΅ΠΌ сообщСниС Π½Π° 2 части

public void OneToTwo ()

{

H0 = new BitArray[17];

L0 = new BitArray[17];

H1 = new BitArray[17];

L1 = new BitArray[17];

HHH = new BitArray[8];

TTT = new BitArray[8];

b1b6 = new BitArray[8];

Itog = new BitArray[btTransp.Length];

ItogPredv = new BitArray[btTransp.Length];

b2b3b4b5 = new BitArray[8];

NStolb = new int[8];

NStr = new int[8];

UzelZam = new int[16, 8];

HShtrih = new BitArray (32);

Funk = new BitArray (32);

for (int gh = 0; gh < btTransp. Length; gh++)

{

Itog[gh] = new BitArray (64);

ItogPredv[gh] = new BitArray (64);

}

for (int qwe = 0; qwe < 8; qwe++)

{

TTT[qwe] = new BitArray (4);

HHH[qwe] = new BitArray (6);

b1b6[qwe] = new BitArray (2);

b2b3b4b5[qwe] = new BitArray (4);

}

HPart = new BitArray[btTransp.Length];

LPart = new BitArray[btTransp.Length];

for (int i = 0; i < 17; i++)

{

H0[i] = new BitArray (32);

L0[i] = new BitArray (32);

H1[i] = new BitArray (48);

L1[i] = new BitArray (48);

}

for (int e = 0; e < btTransp. Length; e++)

{

HPart[e] = new BitArray (32);

LPart[e] = new BitArray (32);

}

for (int s = 0; s < btTransp. Length; s++)

{

for (int d = 0; d < 32; d++)

{

HPart[s][d] = btTransp[s][d];

LPart[s][d] = btTransp[s][d + 32];

}

}

}

//всС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ print выводят шаги Π½Π° ΡΠΊΡ€Π°Π½

public void Print1()

{

buf = 0;

bufff = «» ;

for (int k = 0; k < bt1. Length / 64; k++)

{

listBox1.Items.Add ((k + 1) + «ΠΉ ΠΈΠ·Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹ΠΉ Π±Π»ΠΎΠΊ Π±ΠΈΡ‚:»);

for (int y = 0; y < 64; y++)

{

if ((y == 7) || (y == 15) || (y == 23) || (y == 31) || (y == 39) || (y == 47) || (y == 55) || (y == 63))

{

bufff += (bt1[64 * k + y]? 1: 0).ToString ();

bufff += ««;

}

else

{

bufff += (bt1[64 * k + y]? 1: 0).ToString ();

}

}

listBox1.Items.Add (bufff);

bufff = «» ;

}

}

public void Print2()

{

bufff = «» ;

for (int k = 0; k < btTransp. Length; k++)

{

listBox1.Items.Add ((k + 1) + «ΠΉ ΠΏΠ΅Ρ€Π΅ΡΡ‚Π°Π²Π»Π΅Π½Π½Ρ‹ΠΉ Π±Π»ΠΎΠΊ Π±ΠΈΡ‚:»);

for (int y = 0; y < 64; y++)

{

if ((y == 7) || (y == 15) || (y == 23) || (y == 31) || (y == 39) || (y == 47) || (y == 55) || (y == 63))

{

bufff += (btTransp[k][y]? 1: 0).ToString ();

bufff += ««;

}

else

{

bufff += (btTransp[k][y]? 1: 0).ToString ();

}

}

listBox1.Items.Add (bufff);

bufff = «» ;

}

}

public void Print3()

{

bufff = «» ;

buf = 0;

listBox1.Items.Add («ΠšΠ»ΡŽΡ‡ ΠΈΠ· 56 Π±ΠΈΡ‚:»);

for (int y = 0; y < 64; y++)

{

if ((y == 7) || (y == 15) || (y == 23) || (y == 31) || (y == 39) || (y == 47) || (y == 55) || (y == 63))

{

bufff += «* «;

buf++;

}

else

{

bufff += (btKluch1[y — buf]? 1: 0).ToString ();

}

}

listBox1.Items.Add (bufff);

bufff = «» ;

}

public void Print4()

{

bufff = «» ;

listBox1.Items.Add («ΠšΠ»ΡŽΡ‡ ΠΈΠ· 64 Π±ΠΈΡ‚:»);

for (int y = 0; y < 64; y++)

{

if ((y == 7) || (y == 15) || (y == 23) || (y == 31) || (y == 39) || (y == 47) || (y == 55) || (y == 63))

{

bufff += (btKluch2[y]? 1: 0).ToString ();

bufff += ««;

}

else

{

bufff += (btKluch2[y]? 1: 0).ToString ();

}

}

listBox1.Items.Add (bufff);

bufff = «» ;

}

//ΠΌΠ΅Ρ‚ΠΎΠ΄ ECB

public void ECB ()

{

//ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ΠΈΠΌ ΠΊΠ»ΡŽΡ‡ Π² Π±ΠΈΡ‚Ρ‹

IshSoobshen = textBox4. Text;

KeyToByte ();

if (Shifr == true)

{

IshSoobshen = textBox2. Text;

}

else

{

IshSoobshen = textBox3. Text;

}

if ((IshSoobshen≠ «»)&&(kluch==true))

{

//ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ΠΈΠΌ сообщСниС Π² Π±ΠΈΡ‚Ρ‹

MessToByte ();

buf = bt1. Length / 64;

//Π²Ρ‹Π²ΠΎΠ΄ΠΈΠΌ Π½Π° ΡΠΊΡ€Π°Π½

listBox1.Items.Add («—————————————-ΠŸΠžΠ”Π“ΠžΠ’ΠžΠ’ΠšΠ—————————————-»);

listBox1.Items.Add («Π‘ΠΎΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅ состоит ΠΈΠ· Ρ…» + buf + «64 Π±ΠΈΡ‚Π½Ρ‹Ρ… Π±Π»ΠΎΠΊΠΎΠ²»);

Print1();

//Π΄Π΅Π»ΠΈΠΌ Π½Π° Π±Π»ΠΎΠΊΠΈ

CutForBlock ();

//Π²Ρ‹Π²ΠΎΠ΄ΠΈΠΌ Π½Π° ΡΠΊΡ€Π°Π½

Print2();

////Π²Ρ‹Π²ΠΎΠ΄ Π½Π° ΡΠΊΡ€Π°Π½ ΠΊΠ»ΡŽΡ‡

Print3();

//дополняСм ΠΊΠ»ΡŽΡ‡ Π΄ΠΎ 64 Π±ΠΈΡ‚

KeyTo64();

//Π²Ρ‹Π²ΠΎΠ΄ΠΈΠΌ ΠΊΠ»ΡŽΡ‡ 64 Π±ΠΈΡ‚ Π½Π° ΡΠΊΡ€Π°Π½

Print4();

//ΠΌΠ΅Ρ‚ΠΎΠ΄ для ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Ρ… элСмСнтов

KEYS ();

//Ρ€Π°Π·Π±ΠΈΠ²Π°Π΅ΠΌ сообщСниС Π½Π° ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½ΠΊΠΈ

OneToTwo ();

//функция ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΡ

FUNKCIY ();

}

else

{

if (kluch == true)

{

MessageBox.Show («Π˜ΡΡ…ΠΎΠ΄Π½ΠΎΠ΅ сообщСниС отсутствуСт!»);

}

}

}

//Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ DES-CBC

public void CBC ()

{

//ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ΠΈΠΌ ΠΊΠ»ΡŽΡ‡ Π² Π±ΠΈΡ‚Ρ‹

IshSoobshen = textBox4. Text;

KeyToByte ();

//ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ΠΈΠΌ Π²Π΅ΠΊΡ‚ΠΎΡ€ Π² Π±ΠΈΡ‚Ρ‹

IshSoobshen = textBox6. Text;

VectorToByte ();

if (Shifr == true)

{

IshSoobshen = textBox2. Text;

}

else

{

IshSoobshen = textBox3. Text;

}

if ((IshSoobshen≠ «») && (kluch == true)&&(vector==true))

{

//ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ΠΈΠΌ сообщСниС Π² Π±ΠΈΡ‚Ρ‹

MessToByte ();

buf = bt1. Length / 64;

//Π²Ρ‹Π²ΠΎΠ΄ΠΈΠΌ Π½Π° ΡΠΊΡ€Π°Π½

listBox1.Items.Add («—————————————-ΠŸΠžΠ”Π“ΠžΠ’ΠžΠ’ΠšΠ—————————————-»);

listBox1.Items.Add («Π‘ΠΎΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅ состоит ΠΈΠ· Ρ…» + buf + «64 Π±ΠΈΡ‚Π½Ρ‹Ρ… Π±Π»ΠΎΠΊΠΎΠ²»);

Print1();

//Π΄Π΅Π»ΠΈΠΌ Π½Π° Π±Π»ΠΎΠΊΠΈ

CutForBlock ();

//Π²Ρ‹Π²ΠΎΠ΄ΠΈΠΌ Π½Π° ΡΠΊΡ€Π°Π½

Print2();

////Π²Ρ‹Π²ΠΎΠ΄ Π½Π° ΡΠΊΡ€Π°Π½ ΠΊΠ»ΡŽΡ‡

Print3();

//дополняСм ΠΊΠ»ΡŽΡ‡ Π΄ΠΎ 64 Π±ΠΈΡ‚

KeyTo64();

//Π²Ρ‹Π²ΠΎΠ΄ΠΈΠΌ ΠΊΠ»ΡŽΡ‡ 64 Π±ΠΈΡ‚ Π½Π° ΡΠΊΡ€Π°Π½

Print4();

//ΠΌΠ΅Ρ‚ΠΎΠ΄ для ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Ρ… элСмСнтов

KEYS ();

//XOR с Π²Π΅ΠΊΡ‚ΠΎΡ€ΠΎΠΌ

if (Shifr == true)

{

btTransp[0]. Xor (Vekt);

}

//Ρ€Π°Π·Π±ΠΈΠ²Π°Π΅ΠΌ сообщСниС Π½Π° ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½ΠΊΠΈ

OneToTwo ();

//функция ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΡ

FUNKCIY ();

}

else

{

if ((kluch == true)&&(vector==true))

{

MessageBox.Show («Π˜ΡΡ…ΠΎΠ΄Π½ΠΎΠ΅ сообщСниС отсутствуСт!»);

}

}

}

//EEE

public void EEE ()

{

if (((EEE3==true)&&(textBox4.Text.Length == 7) && (textBox7.Text.Length == 7) && (textBox8.Text.Length == 7))||((EEE2==true)&&(textBox4.Text.Length == 7) && (textBox7.Text.Length == 7)))

{

if (Shifr == true)

{

//ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ΠΈΠΌ ΠΊΠ»ΡŽΡ‡ Π² Π±ΠΈΡ‚Ρ‹

IshSoobshen = textBox4. Text;

KeyToByte ();

IshSoobshen = textBox2. Text;

if ((IshSoobshen≠ «») && (kluch == true))

{

//ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ΠΈΠΌ сообщСниС Π² Π±ΠΈΡ‚Ρ‹

MessToByte ();

buf = bt1. Length / 64;

//Π²Ρ‹Π²ΠΎΠ΄ΠΈΠΌ Π½Π° ΡΠΊΡ€Π°Π½

listBox1.Items.Add («—————————————-ΠŸΠžΠ”Π“ΠžΠ’ΠžΠ’ΠšΠ—————————————-»);

listBox1.Items.Add («Π‘ΠΎΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅ состоит ΠΈΠ· Ρ…» + buf + «64 Π±ΠΈΡ‚Π½Ρ‹Ρ… Π±Π»ΠΎΠΊΠΎΠ²»);

Print1();

//Π΄Π΅Π»ΠΈΠΌ Π½Π° Π±Π»ΠΎΠΊΠΈ

CutForBlock ();

//Π²Ρ‹Π²ΠΎΠ΄ΠΈΠΌ Π½Π° ΡΠΊΡ€Π°Π½

Print2();

////Π²Ρ‹Π²ΠΎΠ΄ Π½Π° ΡΠΊΡ€Π°Π½ ΠΊΠ»ΡŽΡ‡

Print3();

//дополняСм ΠΊΠ»ΡŽΡ‡ Π΄ΠΎ 64 Π±ΠΈΡ‚

KeyTo64();

//Π²Ρ‹Π²ΠΎΠ΄ΠΈΠΌ ΠΊΠ»ΡŽΡ‡ 64 Π±ΠΈΡ‚ Π½Π° ΡΠΊΡ€Π°Π½

Print4();

//ΠΌΠ΅Ρ‚ΠΎΠ΄ для ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Ρ… элСмСнтов

KEYS ();

//Ρ€Π°Π·Π±ΠΈΠ²Π°Π΅ΠΌ сообщСниС Π½Π° ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½ΠΊΠΈ

OneToTwo ();

//функция ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΡ

FUNKCIY ();

IshSoobshen = textBox7. Text;

KeyToByte ();

IshSoobshen = textBox3. Text;

textBox3.Clear ();

//ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ΠΈΠΌ сообщСниС Π² Π±ΠΈΡ‚Ρ‹

MessToByte ();

//Π²Ρ‹Π²ΠΎΠ΄ΠΈΠΌ Π½Π° ΡΠΊΡ€Π°Π½

listBox1.Items.Add (««);

Print1();

//Π΄Π΅Π»ΠΈΠΌ Π½Π° Π±Π»ΠΎΠΊΠΈ

CutForBlock ();

//Π²Ρ‹Π²ΠΎΠ΄ΠΈΠΌ Π½Π° ΡΠΊΡ€Π°Π½

Print2();

////Π²Ρ‹Π²ΠΎΠ΄ Π½Π° ΡΠΊΡ€Π°Π½ ΠΊΠ»ΡŽΡ‡

Print3();

//дополняСм ΠΊΠ»ΡŽΡ‡ Π΄ΠΎ 64 Π±ΠΈΡ‚

KeyTo64();

//Π²Ρ‹Π²ΠΎΠ΄ΠΈΠΌ ΠΊΠ»ΡŽΡ‡ 64 Π±ΠΈΡ‚ Π½Π° ΡΠΊΡ€Π°Π½

Print4();

//ΠΌΠ΅Ρ‚ΠΎΠ΄ для ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Ρ… элСмСнтов

KEYS ();

//Ρ€Π°Π·Π±ΠΈΠ²Π°Π΅ΠΌ сообщСниС Π½Π° ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½ΠΊΠΈ

OneToTwo ();

//функция ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΡ

FUNKCIY ();

if (EEE3 == true)

{

IshSoobshen = textBox8. Text;

}

if (EEE2 == true)

{

IshSoobshen = textBox4. Text;

}

KeyToByte ();

IshSoobshen = textBox3. Text;

textBox3.Clear ();

//ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ΠΈΠΌ сообщСниС Π² Π±ΠΈΡ‚Ρ‹

MessToByte ();

//Π²Ρ‹Π²ΠΎΠ΄ΠΈΠΌ Π½Π° ΡΠΊΡ€Π°Π½

listBox1.Items.Add (««);

Print1();

//Π΄Π΅Π»ΠΈΠΌ Π½Π° Π±Π»ΠΎΠΊΠΈ

CutForBlock ();

//Π²Ρ‹Π²ΠΎΠ΄ΠΈΠΌ Π½Π° ΡΠΊΡ€Π°Π½

Print2();

////Π²Ρ‹Π²ΠΎΠ΄ Π½Π° ΡΠΊΡ€Π°Π½ ΠΊΠ»ΡŽΡ‡

Print3();

//дополняСм ΠΊΠ»ΡŽΡ‡ Π΄ΠΎ 64 Π±ΠΈΡ‚

KeyTo64();

//Π²Ρ‹Π²ΠΎΠ΄ΠΈΠΌ ΠΊΠ»ΡŽΡ‡ 64 Π±ΠΈΡ‚ Π½Π° ΡΠΊΡ€Π°Π½

Print4();

//ΠΌΠ΅Ρ‚ΠΎΠ΄ для ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Ρ… элСмСнтов

KEYS ();

//Ρ€Π°Π·Π±ΠΈΠ²Π°Π΅ΠΌ сообщСниС Π½Π° ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½ΠΊΠΈ

OneToTwo ();

//функция ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΡ

FUNKCIY ();

}

else

{

if (kluch == true)

{

MessageBox.Show («Π˜ΡΡ…ΠΎΠ΄Π½ΠΎΠ΅ сообщСниС отсутствуСт!»);

}

}

}

else

{

//ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ΠΈΠΌ ΠΊΠ»ΡŽΡ‡ Π² Π±ΠΈΡ‚Ρ‹

if (EEE3 == true)

{

IshSoobshen = textBox8. Text;

}

if (EEE2 == true)

{

IshSoobshen = textBox4. Text;

}

KeyToByte ();

IshSoobshen = textBox3. Text;

if ((IshSoobshen≠ «») && (kluch == true))

{

//ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ΠΈΠΌ сообщСниС Π² Π±ΠΈΡ‚Ρ‹

MessToByte ();

buf = bt1. Length / 64;

//Π²Ρ‹Π²ΠΎΠ΄ΠΈΠΌ Π½Π° ΡΠΊΡ€Π°Π½

listBox1.Items.Add («—————————————-ΠŸΠžΠ”Π“ΠžΠ’ΠžΠ’ΠšΠ—————————————-»);

listBox1.Items.Add («Π‘ΠΎΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅ состоит ΠΈΠ· Ρ…» + buf + «64 Π±ΠΈΡ‚Π½Ρ‹Ρ… Π±Π»ΠΎΠΊΠΎΠ²»);

Print1();

//Π΄Π΅Π»ΠΈΠΌ Π½Π° Π±Π»ΠΎΠΊΠΈ

CutForBlock ();

//Π²Ρ‹Π²ΠΎΠ΄ΠΈΠΌ Π½Π° ΡΠΊΡ€Π°Π½

Print2();

////Π²Ρ‹Π²ΠΎΠ΄ Π½Π° ΡΠΊΡ€Π°Π½ ΠΊΠ»ΡŽΡ‡

Print3();

//дополняСм ΠΊΠ»ΡŽΡ‡ Π΄ΠΎ 64 Π±ΠΈΡ‚

KeyTo64();

//Π²Ρ‹Π²ΠΎΠ΄ΠΈΠΌ ΠΊΠ»ΡŽΡ‡ 64 Π±ΠΈΡ‚ Π½Π° ΡΠΊΡ€Π°Π½

Print4();

//ΠΌΠ΅Ρ‚ΠΎΠ΄ для ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Ρ… элСмСнтов

KEYS ();

//Ρ€Π°Π·Π±ΠΈΠ²Π°Π΅ΠΌ сообщСниС Π½Π° ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½ΠΊΠΈ

OneToTwo ();

//функция ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΡ

FUNKCIY ();

IshSoobshen = textBox7. Text;

KeyToByte ();

IshSoobshen = textBox5. Text;

textBox5.Clear ();

//ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ΠΈΠΌ сообщСниС Π² Π±ΠΈΡ‚Ρ‹

MessToByte ();

//Π²Ρ‹Π²ΠΎΠ΄ΠΈΠΌ Π½Π° ΡΠΊΡ€Π°Π½

listBox1.Items.Add (««);

Print1();

//Π΄Π΅Π»ΠΈΠΌ Π½Π° Π±Π»ΠΎΠΊΠΈ

CutForBlock ();

//Π²Ρ‹Π²ΠΎΠ΄ΠΈΠΌ Π½Π° ΡΠΊΡ€Π°Π½

Print2();

////Π²Ρ‹Π²ΠΎΠ΄ Π½Π° ΡΠΊΡ€Π°Π½ ΠΊΠ»ΡŽΡ‡

Print3();

//дополняСм ΠΊΠ»ΡŽΡ‡ Π΄ΠΎ 64 Π±ΠΈΡ‚

KeyTo64();

//Π²Ρ‹Π²ΠΎΠ΄ΠΈΠΌ ΠΊΠ»ΡŽΡ‡ 64 Π±ΠΈΡ‚ Π½Π° ΡΠΊΡ€Π°Π½

Print4();

//ΠΌΠ΅Ρ‚ΠΎΠ΄ для ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Ρ… элСмСнтов

KEYS ();

//Ρ€Π°Π·Π±ΠΈΠ²Π°Π΅ΠΌ сообщСниС Π½Π° ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½ΠΊΠΈ

OneToTwo ();

//функция ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΡ

FUNKCIY ();

IshSoobshen = textBox4. Text;

KeyToByte ();

IshSoobshen = textBox5. Text;

textBox5.Clear ();

//ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ΠΈΠΌ сообщСниС Π² Π±ΠΈΡ‚Ρ‹

MessToByte ();

//Π²Ρ‹Π²ΠΎΠ΄ΠΈΠΌ Π½Π° ΡΠΊΡ€Π°Π½

listBox1.Items.Add (««);

Print1();

//Π΄Π΅Π»ΠΈΠΌ Π½Π° Π±Π»ΠΎΠΊΠΈ

CutForBlock ();

//Π²Ρ‹Π²ΠΎΠ΄ΠΈΠΌ Π½Π° ΡΠΊΡ€Π°Π½

Print2();

////Π²Ρ‹Π²ΠΎΠ΄ Π½Π° ΡΠΊΡ€Π°Π½ ΠΊΠ»ΡŽΡ‡

Print3();

//дополняСм ΠΊΠ»ΡŽΡ‡ Π΄ΠΎ 64 Π±ΠΈΡ‚

KeyTo64();

//Π²Ρ‹Π²ΠΎΠ΄ΠΈΠΌ ΠΊΠ»ΡŽΡ‡ 64 Π±ΠΈΡ‚ Π½Π° ΡΠΊΡ€Π°Π½

Print4();

//ΠΌΠ΅Ρ‚ΠΎΠ΄ для ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Ρ… элСмСнтов

KEYS ();

//Ρ€Π°Π·Π±ΠΈΠ²Π°Π΅ΠΌ сообщСниС Π½Π° ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½ΠΊΠΈ

OneToTwo ();

//функция ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΡ

FUNKCIY ();

}

else

{

if (kluch == true)

{

MessageBox.Show («Π˜ΡΡ…ΠΎΠ΄Π½ΠΎΠ΅ сообщСниС отсутствуСт!»);

}

}

}

}

else

{

MessageBox.Show («ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ ΠΊΠ»ΡŽΡ‡ΠΈ. Один ΠΈΠ· Π½ΠΈΡ… Π½Π΅ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚.»);

}

}

//EDE

public void EDE ()

{

if (((EDE3 == true) && (textBox4.Text.Length == 7) && (textBox7.Text.Length == 7) && (textBox8.Text.Length == 7)) || ((EDE2 == true) && (textBox4.Text.Length == 7) && (textBox7.Text.Length == 7)))

{

if (Shifr == true)

{

//ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ΠΈΠΌ ΠΊΠ»ΡŽΡ‡ Π² Π±ΠΈΡ‚Ρ‹

IshSoobshen = textBox4. Text;

KeyToByte ();

IshSoobshen = textBox2. Text;

if ((IshSoobshen≠ «») && (kluch == true))

{

//ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ΠΈΠΌ сообщСниС Π² Π±ΠΈΡ‚Ρ‹

MessToByte ();

buf = bt1. Length / 64;

//Π²Ρ‹Π²ΠΎΠ΄ΠΈΠΌ Π½Π° ΡΠΊΡ€Π°Π½

listBox1.Items.Add («—————————————-ΠŸΠžΠ”Π“ΠžΠ’ΠžΠ’ΠšΠ—————————————-»);

listBox1.Items.Add («Π‘ΠΎΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅ состоит ΠΈΠ· Ρ…» + buf + «64 Π±ΠΈΡ‚Π½Ρ‹Ρ… Π±Π»ΠΎΠΊΠΎΠ²»);

Print1();

//Π΄Π΅Π»ΠΈΠΌ Π½Π° Π±Π»ΠΎΠΊΠΈ

CutForBlock ();

//Π²Ρ‹Π²ΠΎΠ΄ΠΈΠΌ Π½Π° ΡΠΊΡ€Π°Π½

Print2();

////Π²Ρ‹Π²ΠΎΠ΄ Π½Π° ΡΠΊΡ€Π°Π½ ΠΊΠ»ΡŽΡ‡

Print3();

//дополняСм ΠΊΠ»ΡŽΡ‡ Π΄ΠΎ 64 Π±ΠΈΡ‚

KeyTo64();

//Π²Ρ‹Π²ΠΎΠ΄ΠΈΠΌ ΠΊΠ»ΡŽΡ‡ 64 Π±ΠΈΡ‚ Π½Π° ΡΠΊΡ€Π°Π½

Print4();

//ΠΌΠ΅Ρ‚ΠΎΠ΄ для ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Ρ… элСмСнтов

KEYS ();

//Ρ€Π°Π·Π±ΠΈΠ²Π°Π΅ΠΌ сообщСниС Π½Π° ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½ΠΊΠΈ

OneToTwo ();

//функция ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΡ

FUNKCIY ();

Shifr = false;

IshSoobshen = textBox7. Text;

KeyToByte ();

IshSoobshen = textBox3. Text;

textBox3.Clear ();

//ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ΠΈΠΌ сообщСниС Π² Π±ΠΈΡ‚Ρ‹

MessToByte ();

//Π²Ρ‹Π²ΠΎΠ΄ΠΈΠΌ Π½Π° ΡΠΊΡ€Π°Π½

listBox1.Items.Add (««);

Print1();

//Π΄Π΅Π»ΠΈΠΌ Π½Π° Π±Π»ΠΎΠΊΠΈ

CutForBlock ();

//Π²Ρ‹Π²ΠΎΠ΄ΠΈΠΌ Π½Π° ΡΠΊΡ€Π°Π½

Print2();

////Π²Ρ‹Π²ΠΎΠ΄ Π½Π° ΡΠΊΡ€Π°Π½ ΠΊΠ»ΡŽΡ‡

Print3();

//дополняСм ΠΊΠ»ΡŽΡ‡ Π΄ΠΎ 64 Π±ΠΈΡ‚

KeyTo64();

//Π²Ρ‹Π²ΠΎΠ΄ΠΈΠΌ ΠΊΠ»ΡŽΡ‡ 64 Π±ΠΈΡ‚ Π½Π° ΡΠΊΡ€Π°Π½

Print4();

//ΠΌΠ΅Ρ‚ΠΎΠ΄ для ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Ρ… элСмСнтов

KEYS ();

//Ρ€Π°Π·Π±ΠΈΠ²Π°Π΅ΠΌ сообщСниС Π½Π° ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½ΠΊΠΈ

OneToTwo ();

//функция ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΡ

FUNKCIY ();

Shifr = true;

if (EDE3 == true)

{

IshSoobshen = textBox8. Text;

}

if (EDE2 == true)

{

IshSoobshen = textBox4. Text;

}

KeyToByte ();

IshSoobshen = textBox5. Text;

textBox5.Clear ();

//ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ΠΈΠΌ сообщСниС Π² Π±ΠΈΡ‚Ρ‹

MessToByte ();

//Π²Ρ‹Π²ΠΎΠ΄ΠΈΠΌ Π½Π° ΡΠΊΡ€Π°Π½

listBox1.Items.Add (««);

Print1();

//Π΄Π΅Π»ΠΈΠΌ Π½Π° Π±Π»ΠΎΠΊΠΈ

CutForBlock ();

//Π²Ρ‹Π²ΠΎΠ΄ΠΈΠΌ Π½Π° ΡΠΊΡ€Π°Π½

Print2();

////Π²Ρ‹Π²ΠΎΠ΄ Π½Π° ΡΠΊΡ€Π°Π½ ΠΊΠ»ΡŽΡ‡

Print3();

//дополняСм ΠΊΠ»ΡŽΡ‡ Π΄ΠΎ 64 Π±ΠΈΡ‚

KeyTo64();

//Π²Ρ‹Π²ΠΎΠ΄ΠΈΠΌ ΠΊΠ»ΡŽΡ‡ 64 Π±ΠΈΡ‚ Π½Π° ΡΠΊΡ€Π°Π½

Print4();

//ΠΌΠ΅Ρ‚ΠΎΠ΄ для ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Ρ… элСмСнтов

KEYS ();

//Ρ€Π°Π·Π±ΠΈΠ²Π°Π΅ΠΌ сообщСниС Π½Π° ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½ΠΊΠΈ

OneToTwo ();

//функция ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΡ

FUNKCIY ();

}

else

{

if (kluch == true)

{

MessageBox.Show («Π˜ΡΡ…ΠΎΠ΄Π½ΠΎΠ΅ сообщСниС отсутствуСт!»);

}

}

}

else

{

//ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ΠΈΠΌ ΠΊΠ»ΡŽΡ‡ Π² Π±ΠΈΡ‚Ρ‹

if (EDE3 == true)

{

IshSoobshen = textBox8. Text;

}

if (EDE2 == true)

{

IshSoobshen = textBox4. Text;

}

KeyToByte ();

IshSoobshen = textBox3. Text;

bufff1 = textBox3. Text;

if ((IshSoobshen≠ «») && (kluch == true))

{

//ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ΠΈΠΌ сообщСниС Π² Π±ΠΈΡ‚Ρ‹

MessToByte ();

buf = bt1. Length / 64;

//Π²Ρ‹Π²ΠΎΠ΄ΠΈΠΌ Π½Π° ΡΠΊΡ€Π°Π½

listBox1.Items.Add («—————————————-ΠŸΠžΠ”Π“ΠžΠ’ΠžΠ’ΠšΠ—————————————-»);

listBox1.Items.Add («Π‘ΠΎΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅ состоит ΠΈΠ· Ρ…» + buf + «64 Π±ΠΈΡ‚Π½Ρ‹Ρ… Π±Π»ΠΎΠΊΠΎΠ²»);

Print1();

//Π΄Π΅Π»ΠΈΠΌ Π½Π° Π±Π»ΠΎΠΊΠΈ

CutForBlock ();

//Π²Ρ‹Π²ΠΎΠ΄ΠΈΠΌ Π½Π° ΡΠΊΡ€Π°Π½

Print2();

////Π²Ρ‹Π²ΠΎΠ΄ Π½Π° ΡΠΊΡ€Π°Π½ ΠΊΠ»ΡŽΡ‡

Print3();

//дополняСм ΠΊΠ»ΡŽΡ‡ Π΄ΠΎ 64 Π±ΠΈΡ‚

KeyTo64();

//Π²Ρ‹Π²ΠΎΠ΄ΠΈΠΌ ΠΊΠ»ΡŽΡ‡ 64 Π±ΠΈΡ‚ Π½Π° ΡΠΊΡ€Π°Π½

Print4();

//ΠΌΠ΅Ρ‚ΠΎΠ΄ для ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Ρ… элСмСнтов

KEYS ();

//Ρ€Π°Π·Π±ΠΈΠ²Π°Π΅ΠΌ сообщСниС Π½Π° ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½ΠΊΠΈ

OneToTwo ();

//функция ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΡ

FUNKCIY ();

Shifr = true;

IshSoobshen = textBox7. Text;

KeyToByte ();

IshSoobshen = textBox5. Text;

textBox5.Clear ();

textBox3.Clear ();

//ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ΠΈΠΌ сообщСниС Π² Π±ΠΈΡ‚Ρ‹

MessToByte ();

//Π²Ρ‹Π²ΠΎΠ΄ΠΈΠΌ Π½Π° ΡΠΊΡ€Π°Π½

listBox1.Items.Add (««);

Print1();

//Π΄Π΅Π»ΠΈΠΌ Π½Π° Π±Π»ΠΎΠΊΠΈ

CutForBlock ();

//Π²Ρ‹Π²ΠΎΠ΄ΠΈΠΌ Π½Π° ΡΠΊΡ€Π°Π½

Print2();

////Π²Ρ‹Π²ΠΎΠ΄ Π½Π° ΡΠΊΡ€Π°Π½ ΠΊΠ»ΡŽΡ‡

Print3();

//дополняСм ΠΊΠ»ΡŽΡ‡ Π΄ΠΎ 64 Π±ΠΈΡ‚

KeyTo64();

//Π²Ρ‹Π²ΠΎΠ΄ΠΈΠΌ ΠΊΠ»ΡŽΡ‡ 64 Π±ΠΈΡ‚ Π½Π° ΡΠΊΡ€Π°Π½

Print4();

//ΠΌΠ΅Ρ‚ΠΎΠ΄ для ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Ρ… элСмСнтов

KEYS ();

//Ρ€Π°Π·Π±ΠΈΠ²Π°Π΅ΠΌ сообщСниС Π½Π° ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½ΠΊΠΈ

OneToTwo ();

//функция ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΡ

FUNKCIY ();

Shifr = false;

IshSoobshen = textBox4. Text;

KeyToByte ();

IshSoobshen = textBox3. Text;

textBox3.Clear ();

textBox3.Text = bufff1;

//ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ΠΈΠΌ сообщСниС Π² Π±ΠΈΡ‚Ρ‹

MessToByte ();

//Π²Ρ‹Π²ΠΎΠ΄ΠΈΠΌ Π½Π° ΡΠΊΡ€Π°Π½

listBox1.Items.Add (««);

Print1();

//Π΄Π΅Π»ΠΈΠΌ Π½Π° Π±Π»ΠΎΠΊΠΈ

CutForBlock ();

//Π²Ρ‹Π²ΠΎΠ΄ΠΈΠΌ Π½Π° ΡΠΊΡ€Π°Π½

Print2();

////Π²Ρ‹Π²ΠΎΠ΄ Π½Π° ΡΠΊΡ€Π°Π½ ΠΊΠ»ΡŽΡ‡

Print3();

//дополняСм ΠΊΠ»ΡŽΡ‡ Π΄ΠΎ 64 Π±ΠΈΡ‚

KeyTo64();

//Π²Ρ‹Π²ΠΎΠ΄ΠΈΠΌ ΠΊΠ»ΡŽΡ‡ 64 Π±ΠΈΡ‚ Π½Π° ΡΠΊΡ€Π°Π½

Print4();

//ΠΌΠ΅Ρ‚ΠΎΠ΄ для ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Ρ… элСмСнтов

KEYS ();

//Ρ€Π°Π·Π±ΠΈΠ²Π°Π΅ΠΌ сообщСниС Π½Π° ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½ΠΊΠΈ

OneToTwo ();

//функция ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΡ

FUNKCIY ();

}

else

{

if (kluch == true)

{

MessageBox.Show («Π˜ΡΡ…ΠΎΠ΄Π½ΠΎΠ΅ сообщСниС отсутствуСт!»);

}

}

}

}

else

{

MessageBox.Show («ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ ΠΊΠ»ΡŽΡ‡ΠΈ. Один ΠΈΠ· Π½ΠΈΡ… Π½Π΅ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚.»);

}

}

private void button1_Click (object sender, EventArgs e)

{

listBox1.Items.Clear ();

textBox3.Clear ();

textBox5.Clear ();

Shifr = true;

kluch = false;

vector = false;

EEE3 = false;

EEE2 = false;

EDE3 = false;

EDE2 = false;

if (radioButton1.Checked == true)

{

ECB ();

}

if (radioButton2.Checked == true)

{

CBC ();

}

if (radioButton3.Checked == true)

{

EEE3 = true;

EEE ();

}

if (radioButton4.Checked == true)

{

EDE3 = true;

EDE ();

}

if (radioButton5.Checked == true)

{

EEE2 = true;

ΠŸΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ вСсь тСкст
Π—Π°ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Ρ„ΠΎΡ€ΠΌΡƒ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ Ρ€Π°Π±ΠΎΡ‚ΠΎΠΉ