ΠΡΠΈΠΏΡΠΎΠ³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΡΡΠ΅Π΄ΡΡΠ²Π° Microsoft.
NET
ΠΡΠΈΠΏΡΠΎΠ³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΠΏΡΠΎΠ²Π°ΠΉΠ΄Π΅ΡΡ ΠΌΠΎΠ³ΡΡ Π³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°ΡΡ ΠΊΠ»ΡΡΠΈ ΡΠΈΡΡΠΎΠ²Π°Π½ΠΈΡ ΠΈ Ρ ΡΠ°Π½ΠΈΡΡ ΠΈΡ Π² ΡΠΏΠ΅ΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΡ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ°Ρ . ΠΠ»Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² ΡΠ°Π±ΠΎΡΡ Ρ ΠΏΡΠΎΠ²Π°ΠΉΠ΄Π΅ΡΠΎΠΌ ΡΠ»ΡΠΆΠΈΡ ΡΡΡΡΠΊΡΡΡΠ° CspParameters. ΠΠ°Π½Π½Π°Ρ ΡΡΡΡΠΊΡΡΡΠ° ΠΏΡΠΈΠΌΠ΅Π½ΠΈΠΌΠ° ΠΊΠΎ Π²ΡΠ΅ΠΌ ΠΊΠ»Π°ΡΡΠ°ΠΌΠΈ, ΡΠ΅Π°Π»ΠΈΠ·ΡΡΡΠΈΠΌ ΡΠΈΡΡΠΎΠ²Π°Π½ΠΈΠ΅ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΊΡΠΈΠΏΡΠΎΠ³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΡ ΠΏΡΠΎΠ²Π°ΠΉΠ΄Π΅ΡΠΎΠ². Π‘ΡΡΡΠΊΡΡΡΠ° Π·Π°Π΄Π°Π΅Ρ ΠΈΠΌΡ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ° Π΄Π»Ρ Ρ ΡΠ°Π½Π΅Π½ΠΈΡ ΠΊΠ»ΡΡΠ΅ΠΉ, Π½ΠΎΠΌΠ΅Ρ ΠΊΠ»ΡΡΠ°, ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ ΠΏΡΠΎΠ²Π°ΠΉΠ΄Π΅ΡΠ°… Π§ΠΈΡΠ°ΡΡ Π΅ΡΡ >
ΠΡΠΈΠΏΡΠΎΠ³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΡΡΠ΅Π΄ΡΡΠ²Π° Microsoft. NET (ΡΠ΅ΡΠ΅ΡΠ°Ρ, ΠΊΡΡΡΠΎΠ²Π°Ρ, Π΄ΠΈΠΏΠ»ΠΎΠΌ, ΠΊΠΎΠ½ΡΡΠΎΠ»ΡΠ½Π°Ρ)
Π ΠΎΡΡΠΈΠΉΡΠΊΠΈΠΉ ΠΠΎΡΡΠ΄Π°ΡΡΡΠ²Π΅Π½Π½ΡΠΉ Π‘ΠΎΡΠΈΠ°Π»ΡΠ½ΡΠΉ Π£Π½ΠΈΠ²Π΅ΡΡΠΈΡΠ΅Ρ Π€Π°ΠΊΡΠ»ΡΡΠ΅Ρ ΠΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΎΠ½Π½ΡΡ Π’Π΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΠΉ ΠΠ°ΡΠ΅Π΄ΡΠ° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΎΠ½Π½ΠΎΠΉ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΠΈ ΠΡΡΡΠΎΠ²ΠΎΠΉ ΠΏΡΠΎΠ΅ΠΊΡ ΠΠΈΡΡΠΈΠΏΠ»ΠΈΠ½Π°: ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΠΎ-Π°ΠΏΠΏΠ°ΡΠ°ΡΠ½Π°Ρ Π·Π°ΡΠΈΡΠ° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ Π’Π΅ΠΌΠ°: ΠΡΠΈΠΏΡΠΎΠ³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΡΡΠ΅Π΄ΡΡΠ²Π° Microsoft .NET
ΠΡΠΏΠΎΠ»Π½ΠΈΠ»:
ΡΡΡΠ΄Π΅Π½Ρ Π³ΡΡΠΏΠΏΡ ΠΠΠ-Π-4
ΠΠ΅Π²ΠΈΠ½ Π.Π.
ΠΡΠΎΠ²Π΅ΡΠΈΠ»:
Π₯ΠΎΡΠ΅Π² Π.Π.
ΠΠΎΡΠΊΠ²Π°
Microsoft .NET Framework — ΡΠΏΡΠ°Π²Π»ΡΠ΅ΠΌΠ°Ρ ΡΡΠ΅Π΄Π° Π΄Π»Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΈ ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°ΡΡΠ°Ρ ΠΊΠΎΠ½ΡΡΠΎΠ»Ρ ΡΠΈΠΏΠΎΠ². Π‘ΡΠ΅Π΄Π° ΠΊΠΎΠ½ΡΡΠΎΠ»ΠΈΡΡΠ΅Ρ Π²ΡΠ΅ Π°ΡΠΏΠ΅ΠΊΡΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ: Π²ΡΠ΄Π΅Π»ΡΠ΅Ρ ΠΏΠ°ΠΌΡΡΡ, ΠΎΡΠ²Π΅ΡΠ°Π΅Ρ Π·Π° ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π΅Π½ΠΈΠ΅ ΠΈΠ»ΠΈ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠ΅ΡΡΡΡΠΎΠ², Π° ΡΠ°ΠΊΠΆΠ΅ ΡΠ°Π·ΡΠ΅ΡΠ°Π΅Ρ ΠΈΠ»ΠΈ Π·Π°ΠΏΡΠ΅ΡΠ°Π΅Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅ Π²ΡΠΏΠΎΠ»Π½ΡΡΡ ΡΠ΅ ΠΈΠ»ΠΈ ΠΈΠ½ΡΠ΅ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ. Microsoft .NET Framework ΡΠΎΡΡΠΎΠΈΡ ΠΈΠ· Π΄Π²ΡΡ ΠΎΡΠ½ΠΎΠ²Π½ΡΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ: Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ ΠΊΠ»Π°ΡΡΠΎΠ² .NET Framework (FCL) ΠΈ ΠΎΠ±ΡΠ΅ΡΠ·ΡΠΊΠΎΠ²ΠΎΠΉ ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΠΎΠΉ ΡΡΠ΅Π΄Ρ (CLR — common language runtime). ΠΡΠ½ΠΎΠ²Π½Π°Ρ Π·Π°Π΄Π°ΡΠ° CLR — Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ. Π‘ΡΠ΅Π΄Π° ΠΎΡΠ²Π΅ΡΠ°Π΅Ρ Π·Π° Π±Π°Π·ΠΎΠ²ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ, ΡΠ°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΡ ΠΊΠΎΠ΄Π°, Π²ΡΠ΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΏΠ°ΠΌΡΡΠΈ, ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠΎΡΠΎΠΊΠ°ΠΌΠΈ, ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΈΠΉ. ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, CLR Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ ΡΡΡΠΎΠ³ΡΡ ΠΏΡΠΎΠ²Π΅ΡΠΊΡ ΡΠΈΠΏΠΎΠ².
ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° ΠΊΠ»Π°ΡΡΠΎΠ² .NET Framework ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΠΎΠ³ΡΠΎΠΌΠ½ΡΠΉ Π½Π°Π±ΠΎΡ ΠΊΠ»Π°ΡΡΠΎΠ². Π’ΠΈΠΏΡ ΠΈΠ· Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ ΡΠ²Π»ΡΡΡΡΡ ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠ½ΠΎ-ΠΎΡΠΈΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΌΠΈ ΠΈ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°ΡΡ Π±Π΅ΡΡΠΎΠ²Π½ΡΡ ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, Π½Π°ΠΏΠΈΡΠ°Π½Π½ΡΡ Π½Π° .NET Framework.
Π Microsoft .NET Framework Class Library (FCL) ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ Π±ΠΎΠ»ΡΡΠΎΠ΅ ΡΠΈΡΠ»ΠΎ ΠΊΠ»Π°ΡΡΠΎΠ², ΡΠΎΠ·Π΄Π°Π½Π½ΡΡ Π΄Π»Ρ ΠΊΡΠΈΠΏΡΠΎΠ³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠΉ Π·Π°ΡΠΈΡΡ Π΄Π°Π½Π½ΡΡ . ΠΠΎ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ Ρ Microsoft .NET Framework 1.1 Π²Π΅ΡΡΠΈΡ 2.0 ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ Π³ΠΎΡΠ°Π·Π΄ΠΎ Π±ΠΎΠ»ΡΡΠ΅Π΅ ΡΠΈΡΠ»ΠΎ ΠΊΠ»Π°ΡΡΠΎΠ² Π΄Π»Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΠΊΡΠΈΠΏΡΠΎΠ³ΡΠ°ΡΠΈΠΈ Ρ ΠΎΡΠΊΡΡΡΡΠΌ ΠΊΠ»ΡΡΠΎΠΌ ΠΈ ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΡ ΠΎΡΠΊΡΡΡΡΡ ΠΊΠ»ΡΡΠ΅ΠΉ.
ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° ΠΊΠ»Π°ΡΡΠΎΠ² Π² Microsoft .NET Framework ΠΎΡΠ³Π°Π½ΠΈΠ·ΠΎΠ²Π°Π½Π° Π² Π²ΠΈΠ΄Π΅ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ² ΠΈΠΌΠ΅Π½. ΠΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ ΠΈΠΌΠ΅Π½ — ΡΡΠΎ Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠ°Ρ Π³ΡΡΠΏΠΏΠ°, ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½ΡΡΡΠ°Ρ ΡΠΈΠΏΡ ΡΠΎ ΡΡ ΠΎΠ΄Π½ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΡΡΡΡ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΊΠ»Π°ΡΡΡ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΈΡΠΌΠΈ Π½Π° Π΄ΠΎΡΡΡΠΏ, ΠΊΡΠΈΠΏΡΠΎΠ³ΡΠ°ΡΠΈΠ΅ΠΉ ΠΈ Π·Π°ΡΠΈΡΠΎΠΉ ΠΏΠΎ ΠΏΡΠ°Π²Π°ΠΌ Π΄ΠΎΡΡΡΠΏΠ° ΠΊ ΠΊΠΎΠ΄Ρ Π½Π°Ρ ΠΎΠ΄ΡΡΡΡ Π² ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π΅ ΠΈΠΌΠ΅Π½ System.Security.ΠΡΠ΅ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΠ΅Π½ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ ΠΊΠ»Π°ΡΡΠΎΠ² .NET Framework ΠΎΡΠ³Π°Π½ΠΈΠ·ΠΎΠ²Π°Π½Ρ Π² Π²ΠΈΠ΄Π΅ ΠΈΠ΅ΡΠ°ΡΡ ΠΈΡΠ΅ΡΠΊΠΎΠΉ ΡΡΡΡΠΊΡΡΡΡ. ΠΠΎΡΠ½Π΅Π²ΡΠΌ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎΠΌ ΠΈΠΌΠ΅Π½ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ ΠΈΠΌΠ΅Π½ System.
1. ΠΠ±Π·ΠΎΡ ΠΊΡΠΈΠΏΡΠΎΠ³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΡ ΠΊΠ»Π°ΡΡΠΎΠ² Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ Framework Class Libr
ΠΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ ΠΈΠΌΠ΅Π½ System.Security.Cryptography ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ Π±ΠΎΠ»ΡΡΠΎΠ΅ ΡΠΈΡΠ»ΠΎ ΠΊΠ»Π°ΡΡΠΎΠ² Π΄Π»Ρ ΠΎΡΡΡΠ΅ΡΡΠ²Π»Π΅Π½ΠΈΡ ΠΊΡΠΈΠΏΡΠΎΠ³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΡ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΠΉ, Π° ΡΠ°ΠΊΠΆΠ΅ ΠΊΠ»Π°ΡΡΡ, ΠΏΠΎΠΌΠΎΠ³Π°ΡΡΠΈΠ΅ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΡΡ ΡΡΠΈ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΡ. Π ΡΠ°ΠΊΠΈΠΌ ΠΊΠ»Π°ΡΡΠ°ΠΌ ΠΎΡΠ½ΠΎΡΡΡΡΡ ΠΊΠ»Π°ΡΡΡ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΊΠ»ΡΡΠ΅ΠΉ, ΠΊΠ»Π°ΡΡΡ ΡΠΎΡΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ° Ρ ΡΠΈΡΡΠΎΠ²ΠΎΠΉ ΠΏΠΎΠ΄ΠΏΠΈΡΡΡ, ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ Π½Π°Π·Π²Π°Π½ΠΈΡ ΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΠ½ΡΡ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠΎΠ² Π°Π»Π³ΠΎΡΠΈΡΠΌΠΎΠ² ΠΈ Ρ. Π΄. ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, Π² ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π΅ ΠΈΠΌΠ΅Π½ ΠΏΡΠΈΡΡΡΡΡΠ²ΡΡΡ ΠΊΠ»Π°ΡΡΡ Π΄Π»Ρ ΠΊΡΠΈΠΏΡΠΎΠ³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠΉ Π·Π°ΡΠΈΡΡ ΠΏΠ°ΠΌΡΡΠΈ ΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ².
Π ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π΅ ΠΈΠΌΠ΅Π½ System.Security.Cryptography ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡΡ Π²Π»ΠΎΠΆΠ΅Π½Π½ΡΠ΅ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΠ΅Π½ Xml ΠΈ X509Certificates. ΠΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ ΠΈΠΌΠ΅Π½ System.Security. Cryptography. Xml Π²ΠΊΠ»ΡΡΠ°Π΅Ρ ΠΊΠ»Π°ΡΡΡ, ΡΠ²ΡΠ·Π°Π½Π½ΡΠ΅ Ρ Π·Π°ΡΠΈΡΠΎΠΉ Xml Π΄Π°Π½Π½ΡΡ . ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π² Π½Π΅ΠΌ ΠΏΡΠΈΡΡΡΡΡΠ²ΡΡΡ ΠΊΠ»Π°ΡΡΡ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΈ ΡΡΠ°Π½Π΄Π°ΡΡΠΎΠ² Xml Digital Signature ΠΈ Xml Encryption.
Π Microsoft .NET Framework ΡΡΡΠ΅ΡΡΠ²ΡΡΡ ΡΡΠΈ ΠΎΡΠ½ΠΎΠ²Π½ΡΡ ΡΠ°Π·Π½ΠΎΠ²ΠΈΠ΄Π½ΠΎΡΡΠΈ ΠΊΡΠΈΠΏΡΠΎΠ³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΡ ΠΊΠ»Π°ΡΡΠΎΠ²:
— Π‘ΠΈΠΌΠΌΠ΅ΡΡΠΈΡΠ½ΡΠ΅ Π°Π»Π³ΠΎΡΠΈΡΠΌΡ ΡΠΈΡΡΠΎΠ²Π°Π½ΠΈΡ
— ΠΡΠΈΠΌΠΌΠ΅ΡΡΠΈΡΠ½ΡΠ΅ Π°Π»Π³ΠΎΡΠΈΡΠΌΡ ΡΠΈΡΡΠΎΠ²Π°Π½ΠΈΡ ΠΈ ΠΏΠΎΠ΄ΠΏΠΈΡΠΈ
— ΠΠ»Π³ΠΎΡΠΈΡΠΌΡ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Ρ Π΅ΡΠ° Π΄Π°Π½Π½ΡΡ Π Microsoft .NET Framework 2.0 ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ ΡΠΈΠΌΠΌΠ΅ΡΡΠΈΡΠ½ΡΠ΅ Π°Π»Π³ΠΎΡΠΈΡΠΌΡ ΡΠΈΡΡΠΎΠ²Π°Π½ΠΈΡ DES, Rijndael (AES), RC2, RC4. ΠΡΠΈΠΌΠΌΠ΅ΡΡΠΈΡΠ½ΡΠ΅ Π°Π»Π³ΠΎΡΠΈΡΠΌΡ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½Ρ ΡΠΎΠ»ΡΠΊΠΎ RSA ΠΈ DSA. ΠΠ· Π°Π»Π³ΠΎΡΠΈΡΠΌΠΎΠ² Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡ Ρ Π΅ΡΠ° Π΄Π°Π½Π½ΡΡ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ SHA1, SHA256, MD5, MD4 ΠΈ Π΄Ρ. (ΠΠ· Π²ΡΡΠ΅ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»Π΅Π½Π½ΡΡ Π°Π»Π³ΠΎΡΠΈΡΠΌΠΎΠ² DES, Rijndael (AES), RC2; RSA ΠΈ DSA; SHA1, SHA256, MD5 ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ Π² Π²ΠΈΠ΄Π΅ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΡ ΠΊΠ»Π°ΡΡΠΎΠ²) ΠΡΠΈΠΏΡΠΎΠ³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠ°Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° ΠΊΠ»Π°ΡΡΠΎΠ² Microsoft .NET Framework ΡΠΏΡΠΎΠ΅ΠΊΡΠΈΡΠΎΠ²Π°Π½Π° Π΄Π»Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΈ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠΉ Π³ΠΈΠ±ΠΊΠΎΡΡΠΈ Π² ΡΠΎΠ·Π΄Π°Π½ΠΈΠΈ Π½ΠΎΠ²ΡΡ Π°Π»Π³ΠΎΡΠΈΡΠΌΠΎΠ² Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌΠΎΠ² Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΡ. ΠΠ΅ΡΠ°ΡΡ ΠΈΡ ΠΊΠ»Π°ΡΡΠΎΠ², ΡΠ΅Π°Π»ΠΈΠ·ΡΡΡΠΈΡ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠ΅ ΠΊΡΠΈΠΏΡΠΎΠ³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ Π°Π»Π³ΠΎΡΠΈΡΠΌΡ, ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΡΡΠΈ ΡΡΠΎΠ²Π½Ρ:
— Π’ΠΈΠΏ Π°Π»Π³ΠΎΡΠΈΡΠΌΠ° (ΠΊΠ»Π°ΡΡΡ ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ ΡΡΠΎΠ²Π½Ρ).
— ΠΠ»Π°ΡΡ Π°Π»Π³ΠΎΡΠΈΡΠΌΠ° (ΠΊΠ»Π°ΡΡΡ Π²ΡΠΎΡΠΎΠ³ΠΎ ΡΡΠΎΠ²Π½Ρ). ΠΠ°Π½Π½ΡΠ΅ ΠΊΠ»Π°ΡΡΡ Π½Π°ΡΠ»Π΅Π΄ΡΡΡΡΡ ΠΎΡ ΠΊΠ»Π°ΡΡΠΎΠ² ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ ΡΡΠΎΠ²Π½Ρ.
— ΠΠ° ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅ΠΌ ΡΡΠΎΠ²Π½Π΅ Π½Π°Ρ ΠΎΠ΄ΡΡΡΡ ΠΊΠ»Π°ΡΡΡ, ΡΠ΅Π°Π»ΠΈΠ·ΡΡΡΠΈΠ΅ ΡΠ°ΠΌΠΈ Π°Π»Π³ΠΎΡΠΈΡΠΌΡ. ΠΠ½ΠΈ Π½Π°ΡΠ»Π΅Π΄ΡΡΡΡΡ ΠΎΡ ΠΊΠ»Π°ΡΡΠΎΠ² Π²ΡΠΎΡΠΎΠ³ΠΎ ΡΡΠΎΠ²Π½Ρ.
ΠΡΠΈΠΌΠ΅ΡΠ°ΠΌΠΈ ΠΊΠ»Π°ΡΡΠΎΠ² ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ ΡΡΠΎΠ²Π½Ρ ΡΠ²Π»ΡΡΡΡΡ AsymmetricAlgorithm ΠΈΠ»ΠΈ HashAlgorithm. ΠΠ»Π°ΡΡΠ°ΠΌΠΈ Π²ΡΠΎΡΠΎΠ³ΠΎ ΡΡΠΎΠ²Π½Ρ ΡΠ²Π»ΡΡΡΡΡ RSA ΠΈΠ»ΠΈ SHA1. ΠΠ»Π°ΡΡΡ ΡΡΠ΅ΡΡΠ΅Π³ΠΎ ΡΡΠΎΠ²Π½Ρ ΡΠ΅Π°Π»ΠΈΠ·ΡΡΡ ΡΠ°ΠΌΠΈ Π°Π»Π³ΠΎΡΠΈΡΠΌΡ. Π ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΡΠΈΠΌΠ΅ΡΠ° ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠΈΠ²Π΅ΡΡΠΈ ΠΊΠ»Π°ΡΡΡ RSACryptoServiceProvider ΠΈΠ»ΠΈ SHA1Managed. ΠΡΠΈ ΡΡΠΎΠΌ ΠΊΠ»Π°ΡΡ RSACryptoServiceProvider, ΠΊΠ°ΠΊ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΈΠ· Π½Π°Π·Π²Π°Π½ΠΈΡ, ΠΎΠ±ΡΠ°ΡΠ°Π΅ΡΡΡ ΠΊ ΠΊΡΠΈΠΏΡΠΎΠ³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠΌΡ ΠΏΡΠΎΠ²Π°ΠΉΠ΄Π΅ΡΡ, Π° ΠΊΠ»Π°ΡΡ SHA1Managed ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ Π½Π° ΡΠΏΡΠ°Π²Π»ΡΠ΅ΠΌΠΎΠΌ ΠΊΠΎΠ΄Π΅. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΠΊΠ»Π°ΡΡ SHA1Managed Π½Π°ΡΠ»Π΅Π΄ΡΠ΅ΡΡΡ ΠΎΡ ΠΊΠ»Π°ΡΡΠ° SHA1, ΠΊΠΎΡΠΎΡΡΠΉ, Π² ΡΠ²ΠΎΡ ΠΎΡΠ΅ΡΠ΅Π΄Ρ, Π½Π°ΡΠ»Π΅Π΄ΡΠ΅ΡΡΡ ΠΎΡ ΠΊΠ»Π°ΡΡΠ° HashAlgorithm. Π’Π°ΠΊΠΎΠ΅ ΡΡΡΡΠΎΠΉΡΡΠ²ΠΎ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ Π΄Π°Π΅Ρ ΡΠΈΡΠΎΡΠ°ΠΉΡΠΈΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ ΠΏΠΎ ΡΠ°Π±ΠΎΡΠ΅ Ρ ΠΊΡΠΈΠΏΡΠΎΠ³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΌΠΈ Π°Π»Π³ΠΎΡΠΈΡΠΌΠ°ΠΌΠΈ, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΡΡ ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΠΎΡΡΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΎΠ² ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΉ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈ ΡΠΎΠ³ΠΎ ΠΆΠ΅ ΠΊΡΠΈΠΏΡΠΎΠ³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ Π°Π»Π³ΠΎΡΠΈΡΠΌΠ°.
1.1 ΠΠ»Π°ΡΡΡ Π°Π»Π³ΠΎΡΠΈΡΠΌΠΎΠ² ΡΠΈΠΌΠΌΠ΅ΡΡΠΈΡΠ½ΠΎΠ³ΠΎ ΡΠΈΡΡΠΎΠ²Π°Π½ΠΈΡ
SymmetricAlgorithm ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ Π°Π±ΡΡΡΠ°ΠΊΡΠ½ΡΠΉ Π±Π°Π·ΠΎΠ²ΡΠΉ ΠΊΠ»Π°ΡΡ, ΠΎΡ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ Π½Π°ΡΠ»Π΅Π΄ΡΡΡΡΡ Π²ΡΠ΅ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π°Π»Π³ΠΎΡΠΈΡΠΌΠΎΠ² ΡΠΈΠΌΠΌΠ΅ΡΡΠΈΡΠ½ΠΎΠ³ΠΎ ΡΠΈΡΡΠΎΠ²Π°Π½ΠΈΡ.
ΠΠ»Π°ΡΡΡ Π±Π»ΠΎΡΠ½ΡΡ ΡΠΈΡΡΠΎΠ², ΡΠ²Π»ΡΡΡΠΈΠ΅ΡΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΡΠΌΠΈ ΠΊΠ»Π°ΡΡΠ° SymmetricAlgorithm, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡ ΡΠ΅ΠΆΠΈΠΌ ΡΡΠ΅ΠΏΠ»Π΅Π½ΠΈΡ, Π½Π°Π·ΡΠ²Π°Π΅ΠΌΡΠΉ ΡΡΠ΅ΠΏΠ»Π΅Π½ΠΈΠ΅ΠΌ Π±Π»ΠΎΠΊΠΎΠ² ΡΠΈΡΡΡΠ΅ΠΊΡΡΠ°, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ Π΄Π»Ρ ΠΎΡΡΡΠ΅ΡΡΠ²Π»Π΅Π½ΠΈΡ ΠΊΡΠΈΠΏΡΠΎΠ³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΡ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΠΉ Π΄Π°Π½Π½ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ ΠΊΠ»ΡΡ (Key) ΠΈ Π²Π΅ΠΊΡΠΎΡ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ (IV). Π§ΡΠΎΠ±Ρ ΡΠ°ΡΡΠΈΡΡΠΎΠ²Π°ΡΡ Π΄Π°Π½Π½ΡΠ΅, Π·Π°ΡΠΈΡΡΠΎΠ²Π°Π½Π½ΡΠ΅ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ· ΠΊΠ»Π°ΡΡΠΎΠ² SymmetricAlgorithm, Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π·Π°Π΄Π°ΡΡ Π΄Π»Ρ ΡΠ²ΠΎΠΉΡΡΠ² Key ΠΈ IV Π·Π½Π°ΡΠ΅Π½ΠΈΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»ΠΈΡΡ ΠΏΡΠΈ Π·Π°ΡΠΈΡΡΠΎΠ²Π°Π½ΠΈΠΈ. ΠΠ»Ρ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΠ³ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Π°Π»Π³ΠΎΡΠΈΡΠΌΠ° ΡΠΈΠΌΠΌΠ΅ΡΡΠΈΡΠ½ΠΎΠ³ΠΎ ΡΠΈΡΡΠΎΠ²Π°Π½ΠΈΡ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ, ΡΡΠΎΠ±Ρ ΡΠ΅ΠΊΡΠ΅ΡΠ½ΡΠΉ ΠΊΠ»ΡΡ Π·Π½Π°Π»ΠΈ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΡΠΏΡΠ°Π²ΠΈΡΠ΅Π»Ρ ΠΈ ΠΏΠΎΠ»ΡΡΠ°ΡΠ΅Π»Ρ.
RijndaelManaged, DESCryptoServiceProvider, RC2CryptoServiceProvider ΠΈ TripleDESCryptoServiceProvider ΡΠ²Π»ΡΡΡΡΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡΠΌΠΈ Π°Π»Π³ΠΎΡΠΈΡΠΌΠΎΠ² ΡΠΈΠΌΠΌΠ΅ΡΡΠΈΡΠ½ΠΎΠ³ΠΎ ΡΠΈΡΡΠΎΠ²Π°Π½ΠΈΡ.
ΠΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΡΡ ΠΊΠ»Π°ΡΡΠΎΠ² Ρ ΡΠΎΡΠΊΠΈ Π·ΡΠ΅Π½ΠΈΡ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΠΈ Π½Π΅Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΠΏΡΠΎΡΡΠΎ Π²ΡΠΏΠΎΠ»Π½ΡΡΡ ΠΏΡΠΈΠ½ΡΠ΄ΠΈΡΠ΅Π»ΡΠ½ΡΡ ΡΠ±ΠΎΡΠΊΡ ΠΌΡΡΠΎΡΠ° ΠΏΠΎΡΠ»Π΅ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΠΎΠ±ΡΠ΅ΠΊΡΠ°. ΠΠ΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΡΠ²Π½ΠΎ Π²ΡΠ·ΡΠ²Π°ΡΡ ΠΌΠ΅ΡΠΎΠ΄ Clear Π΄Π»Ρ ΠΎΠ±Π½ΡΠ»Π΅Π½ΠΈΡ Π²ΡΠ΅Ρ ΠΊΠΎΠ½ΡΠΈΠ΄Π΅Π½ΡΠΈΠ°Π»ΡΠ½ΡΡ Π΄Π°Π½Π½ΡΡ , ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠΈΡ ΡΡ Π² ΠΎΠ±ΡΠ΅ΠΊΡΠ΅, ΠΏΠ΅ΡΠ΅Π΄ Π΅Π³ΠΎ ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π΅Π½ΠΈΠ΅ΠΌ. ΠΡΠΈ ΡΠ±ΠΎΡΠΊΠ΅ ΠΌΡΡΠΎΡΠ° ΠΎΠ±Π½ΡΠ»Π΅Π½ΠΈΡ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² Π½Π΅ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ, Π²ΠΌΠ΅ΡΡΠΎ ΡΡΠΎΠ³ΠΎ Π²ΡΠ΄Π΅Π»Π΅Π½Π½Π°Ρ ΠΏΠΎΠ΄ ΠΎΠ±ΡΠ΅ΠΊΡΡ ΠΏΠ°ΠΌΡΡΡ ΠΏΡΠΎΡΡΠΎ ΠΏΠΎΠΌΠ΅ΡΠ°Π΅ΡΡΡ ΠΊΠ°ΠΊ Π΄ΠΎΡΡΡΠΏΠ½Π°Ρ Π΄Π»Ρ ΠΏΠ΅ΡΠ΅ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ. ΠΠΎΡΡΠΎΠΌΡ Π΄Π°Π½Π½ΡΠ΅, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠΈΠ΅ΡΡ Π² ΠΎΠ±ΡΠ΅ΠΊΡΠ΅, ΠΏΠΎΠ΄ΠΎΠ±ΡΠ°Π½Π½ΠΎΠΌ ΡΠ±ΠΎΡΡΠΈΠΊΠΎΠΌ ΠΌΡΡΠΎΡΠ°, ΠΌΠΎΠ³ΡΡ ΠΏΠΎ-ΠΏΡΠ΅ΠΆΠ½Π΅ΠΌΡ ΠΏΡΠΈΡΡΡΡΡΠ²ΠΎΠ²Π°ΡΡ Π² ΠΊΡΡΠ΅ Π½Π΅ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ ΠΏΠ°ΠΌΡΡΠΈ. Π ΡΠ»ΡΡΠ°Π΅ ΠΊΡΠΈΠΏΡΠΎΠ³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² ΡΡΠΈ Π΄Π°Π½Π½ΡΠ΅ ΠΌΠΎΠ³ΡΡ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΡΡ ΡΠΎΠ±ΠΎΠΉ ΠΊΠΎΠ½ΡΠΈΠ΄Π΅Π½ΡΠΈΠ°Π»ΡΠ½ΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ, ΡΠ°ΠΊΡΡ ΠΊΠ°ΠΊ ΠΊΠ»ΡΡ ΠΈΠ»ΠΈ Π±Π»ΠΎΠΊ ΠΎΡΠΊΡΡΡΠΎΠ³ΠΎ ΡΠ΅ΠΊΡΡΠ°.
ΠΡΠ΅ ΠΊΡΠΈΠΏΡΠΎΠ³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΠΊΠ»Π°ΡΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ .NET Framework, Π² ΠΎΠ±ΡΠ΅ΠΊΡΡ ΠΊΠΎΡΠΎΡΡΡ Π·Π°ΠΏΠΈΡΡΠ²Π°ΡΡΡΡ ΠΊΠΎΠ½ΡΠΈΠ΄Π΅Π½ΡΠΈΠ°Π»ΡΠ½ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅, ΡΠ΅Π°Π»ΠΈΠ·ΡΡΡ ΠΌΠ΅ΡΠΎΠ΄ Clear. ΠΡΠΈ Π²ΡΠ·ΠΎΠ²Π΅ ΠΌΠ΅ΡΠΎΠ΄Π° Clear ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ ΠΎΠ±Π½ΡΠ»Π΅Π½ΠΈΠ΅ Π²ΡΠ΅Ρ ΠΊΠΎΠ½ΡΠΈΠ΄Π΅Π½ΡΠΈΠ°Π»ΡΠ½ΡΡ Π΄Π°Π½Π½ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠ° Ρ Π΅Π³ΠΎ ΠΏΠΎΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π΅Π½ΠΈΠ΅ΠΌ, ΡΡΠΎΠ±Ρ ΠΎΠ½ ΠΌΠΎΠ³ Π±ΡΡΡ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎ ΠΏΠΎΠ΄ΠΎΠ±ΡΠ°Π½ ΡΠ±ΠΎΡΡΠΈΠΊΠΎΠΌ ΠΌΡΡΠΎΡΠ°. ΠΠΎΡΠ»Π΅ ΠΎΠ±Π½ΡΠ»Π΅Π½ΠΈΡ ΠΈ ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π΅Π½ΠΈΡ ΠΎΠ±ΡΠ΅ΠΊΡΠ° Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π²ΡΠ·Π²Π°ΡΡ ΠΌΠ΅ΡΠΎΠ΄ Dispose Ρ Π·Π°Π΄Π°Π½ΠΈΠ΅ΠΌ Π΄Π»Ρ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° disposing Π·Π½Π°ΡΠ΅Π½ΠΈΡ True, ΡΡΠΎΠ±Ρ ΠΎΡΠ²ΠΎΠ±ΠΎΠ΄ΠΈΡΡ Π²ΡΠ΅ ΡΠΏΡΠ°Π²Π»ΡΠ΅ΠΌΡΠ΅ ΠΈ Π½Π΅ΡΠΏΡΠ°Π²Π»ΡΠ΅ΠΌΡΠ΅ ΡΠ΅ΡΡΡΡΡ, ΡΠ²ΡΠ·Π°Π½Π½ΡΠ΅ Ρ ΡΡΠΈΠΌ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠΌ.
ΠΡΠΈ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΠΈ ΠΎΡ ΠΊΠ»Π°ΡΡΠ° SymmetricAlgorithm Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠ΅ΡΠ΅ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ ΡΠ»Π΅Π½Ρ: CreateDecryptor, CreateEncryptor, GenerateIV ΠΈ GenerateKey.
Π‘Π²ΠΎΠΉΡΡΠ²ΠΎ IV ΠΏΠΎΠ»ΡΡΠ°Π΅Ρ ΠΈΠ»ΠΈ Π·Π°Π΄Π°Π΅Ρ Π²Π΅ΠΊΡΠΎΡ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π΄Π»Ρ Π°Π»Π³ΠΎΡΠΈΡΠΌΠ° ΡΠΈΠΌΠΌΠ΅ΡΡΠΈΡΠ½ΠΎΠ³ΠΎ ΡΠΈΡΡΠΎΠ²Π°Π½ΠΈΡ. ΠΠ΅ΡΠΎΠ΄ GenerateIV ΠΏΡΠΈ ΠΏΠ΅ΡΠ΅ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ Π² ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»Π°ΡΡΠ΅ Π³Π΅Π½Π΅ΡΠΈΡΡΠ΅Ρ ΡΠ»ΡΡΠ°ΠΉΠ½ΡΠΉ Π²Π΅ΠΊΡΠΎΡ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ (IV), ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΠΉ Π΄Π»Ρ Π°Π»Π³ΠΎΡΠΈΡΠΌΠ°. ΠΡΠΎΡ ΠΌΠ΅ΡΠΎΠ΄ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ Π³Π΅Π½Π΅ΡΠ°ΡΠΈΠΈ ΡΠ»ΡΡΠ°ΠΉΠ½ΠΎΠ³ΠΎ Π²Π΅ΠΊΡΠΎΡΠ° ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ, Π΅ΡΠ»ΠΈ ΠΎΠ½ Π½Π΅ Π·Π°Π΄Π°Π½. ΠΡΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΡΠΎΠ·Π΄Π°Π½ΠΈΠΈ Π½ΠΎΠ²ΠΎΠ³ΠΎ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠ° ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ· ΠΊΠ»Π°ΡΡΠΎΠ² SymmetricAlgorithm ΠΈΠ»ΠΈ Π²ΡΠ·ΠΎΠ²Π΅ ΠΌΠ΅ΡΠΎΠ΄Π° GenerateIV Π²ΡΡΡΠ½ΡΡ ΡΠ²ΠΎΠΉΡΡΠ²Ρ IV Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΠΏΡΠΈΡΠ²Π°ΠΈΠ²Π°Π΅ΡΡΡ Π½ΠΎΠ²ΠΎΠ΅ ΡΠ»ΡΡΠ°ΠΉΠ½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅. ΠΠ½Π°ΡΠ΅Π½ΠΈΡ ΡΠ²ΠΎΠΉΡΡΠ² IV ΠΈ BlockSize Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΈΠΌΠ΅ΡΡ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΡΠΉ ΡΠ°Π·ΠΌΠ΅Ρ (BlockSize ΠΏΠΎΠ»ΡΡΠ°Π΅Ρ ΠΈΠ»ΠΈ Π·Π°Π΄Π°Π΅Ρ ΡΠ°Π·ΠΌΠ΅Ρ Π±Π»ΠΎΠΊΠ° ΠΊΡΠΈΠΏΡΠΎΠ³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠΉ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ (Π² Π±ΠΈΡΠ°Ρ )). Π‘Π²ΠΎΠΉΡΡΠ²ΠΎ Key ΠΏΠΎΠ»ΡΡΠ°Π΅Ρ ΠΈΠ»ΠΈ Π·Π°Π΄Π°Π΅Ρ ΡΠ΅ΠΊΡΠ΅ΡΠ½ΡΠΉ ΠΊΠ»ΡΡ Π΄Π»Ρ Π°Π»Π³ΠΎΡΠΈΡΠΌΠ°. ΠΠΎΠΏΡΡΡΠΈΠΌΡΠ΅ ΡΠ°Π·ΠΌΠ΅ΡΡ ΠΊΠ»ΡΡΠ° Π·Π°Π΄Π°ΡΡΡΡ ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠ΅ΠΉ Π°Π»Π³ΠΎΡΠΈΡΠΌΠ° ΡΠΈΠΌΠΌΠ΅ΡΡΠΈΡΠ½ΠΎΠ³ΠΎ ΡΠΈΡΡΠΎΠ²Π°Π½ΠΈΡ ΠΈ ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»ΡΡΡΡΡ Π² ΡΠ²ΠΎΠΉΡΡΠ²Π΅ LegalKeySizes. ΠΡΠ»ΠΈ ΠΏΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ ΡΡΠΎΠ³ΠΎ ΡΠ²ΠΎΠΉΡΡΠ²Π° ΠΎΠ½ΠΎ ΠΈΠΌΠ΅Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ null, Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ ΠΌΠ΅ΡΠΎΠ΄ GenerateKey Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ Π½ΠΎΠ²ΠΎΠ³ΠΎ ΡΠ»ΡΡΠ°ΠΉΠ½ΠΎΠ³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ.
1.2 ΠΠ»Π°ΡΡΡ Π°Π»Π³ΠΎΡΠΈΡΠΌΠΎΠ² Π°ΡΠΈΠΌΠΌΠ΅ΡΡΠΈΡΠ½ΠΎΠ³ΠΎ ΡΠΈΡΡΠΎΠ²Π°Π½ΠΈΡ
Π Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ΅ ΠΊΠ»Π°ΡΡΠΎΠ² Microsoft .NET Framework ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ ΡΠΎΠ»ΡΠΊΠΎ Π΄Π²Π° ΠΊΠ»Π°ΡΡΠ°, ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΡΡΠΈΡ Π°ΡΠΈΠΌΠΌΠ΅ΡΡΠΈΡΠ½ΡΠ΅ ΠΊΡΠΈΠΏΡΠΎΠ³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ Π°Π»Π³ΠΎΡΠΈΡΠΌΡ. ΠΡΠΎ ΠΊΠ»Π°ΡΡΡ RSACryptoServiceProvider ΠΈ DSACryptoServiceProvider. ΠΠ±Π° ΠΊΠ»Π°ΡΡΠ° ΠΏΡΠΈΡΡΡΡΡΠ²ΡΡΡ ΠΊΠ°ΠΊ Π² Microsoft .NET Framework Π²Π΅ΡΡΠΈΠΈ 1.1, ΡΠ°ΠΊ ΠΈ Π²Π΅ΡΡΠΈΠΈ 2.0.
ΠΠ»Π³ΠΎΡΠΈΡΠΌ DSA ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ ΡΠΎΠ»ΡΠΊΠΎ Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΡΠΈΡΡΠΎΠ²ΠΎΠΉ ΠΏΠΎΠ΄ΠΏΠΈΡΠΈ, Π² ΡΠΎ Π²ΡΠ΅ΠΌΡ ΠΊΠ°ΠΊ RSA Π΄Π°Π΅Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΊΠ°ΠΊ ΠΏΠΎΠ΄ΠΏΠΈΡΡΠ²Π°ΡΡ, ΡΠ°ΠΊ ΡΠΈΡΡΠΎΠ²Π°ΡΡ Π΄Π°Π½Π½ΡΠ΅. ΠΠ±Π° ΠΊΠ»Π°ΡΡΠ° ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ ΠΊΠ°ΠΊ ΠΎΠ±Π΅ΡΡΠΊΠΈ Π΄Π»Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ Crypto API. ΠΡΠ΅ ΠΊΡΠΈΠΏΡΠΎΠ³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ Π² ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΠΎΠΌ ΠΊΡΠΈΠΏΡΠΎΠ³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠΌ ΠΏΡΠΎΠ²Π°ΠΉΠ΄Π΅ΡΠ΅ (CSP — Cryptographic Service Provider) Π² Π½Π΅ΡΠΏΡΠ°Π²Π»ΡΠ΅ΠΌΠΎΠΌ ΠΊΠΎΠ΄Π΅ ΠΈ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ ΠΏΠ΅ΡΠ΅Π΄Π°Π΅ΡΡΡ Π² ΡΠΏΡΠ°Π²Π»ΡΠ΅ΠΌΡΠΉ ΠΊΠΎΠ΄. ΠΠ»Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Π² .NET Framework Π΄ΡΡΠ³ΠΈΡ Π°Π»Π³ΠΎΡΠΈΡΠΌΠΎΠ², ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½ΡΡ Π² ΠΊΡΠΈΠΏΡΠΎΠ³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΡ ΠΏΡΠΎΠ²Π°ΠΉΠ΄Π΅ΡΠ°Ρ , Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΡΠ°ΠΊΠΆΠ΅ Π½Π°ΠΏΠΈΡΠ°ΡΡ ΠΊΠ»Π°ΡΡ-ΠΎΠ±Π΅ΡΡΠΊΡ, Π½Π°ΡΠ»Π΅Π΄ΡΠ΅ΠΌΡΠΉ ΠΎΡ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ΅Π³ΠΎ ΠΊΠ»Π°ΡΡΠ° Π²ΡΠΎΡΠΎΠ³ΠΎ ΡΡΠΎΠ²Π½Ρ ΠΈ ΠΎΠ±ΡΠ°ΡΠ°ΡΡΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΎΠ² Crypto API ΠΊ ΡΡΠ½ΠΊΡΠΈΡΠΌ ΠΊΡΠΈΠΏΡΠΎΠ³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΠΏΡΠΎΠ²Π°ΠΉΠ΄Π΅ΡΠ°, ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²ΡΠ²Π°Ρ Π²Ρ ΠΎΠ΄Π½ΡΠ΅ ΠΈ Π²ΡΡ ΠΎΠ΄Π½ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅.
ΠΡΠΈΠΏΡΠΎΠ³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΠΏΡΠΎΠ²Π°ΠΉΠ΄Π΅ΡΡ ΠΌΠΎΠ³ΡΡ Π³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°ΡΡ ΠΊΠ»ΡΡΠΈ ΡΠΈΡΡΠΎΠ²Π°Π½ΠΈΡ ΠΈ Ρ ΡΠ°Π½ΠΈΡΡ ΠΈΡ Π² ΡΠΏΠ΅ΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΡ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ°Ρ . ΠΠ»Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² ΡΠ°Π±ΠΎΡΡ Ρ ΠΏΡΠΎΠ²Π°ΠΉΠ΄Π΅ΡΠΎΠΌ ΡΠ»ΡΠΆΠΈΡ ΡΡΡΡΠΊΡΡΡΠ° CspParameters. ΠΠ°Π½Π½Π°Ρ ΡΡΡΡΠΊΡΡΡΠ° ΠΏΡΠΈΠΌΠ΅Π½ΠΈΠΌΠ° ΠΊΠΎ Π²ΡΠ΅ΠΌ ΠΊΠ»Π°ΡΡΠ°ΠΌΠΈ, ΡΠ΅Π°Π»ΠΈΠ·ΡΡΡΠΈΠΌ ΡΠΈΡΡΠΎΠ²Π°Π½ΠΈΠ΅ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΊΡΠΈΠΏΡΠΎΠ³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΡ ΠΏΡΠΎΠ²Π°ΠΉΠ΄Π΅ΡΠΎΠ². Π‘ΡΡΡΠΊΡΡΡΠ° Π·Π°Π΄Π°Π΅Ρ ΠΈΠΌΡ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ° Π΄Π»Ρ Ρ ΡΠ°Π½Π΅Π½ΠΈΡ ΠΊΠ»ΡΡΠ΅ΠΉ, Π½ΠΎΠΌΠ΅Ρ ΠΊΠ»ΡΡΠ°, ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ ΠΏΡΠΎΠ²Π°ΠΉΠ΄Π΅ΡΠ° ΠΈ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ Π΄ΡΡΠ³ΠΈΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ. ΠΡΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΠΈ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠ° ΠΊΠ»Π°ΡΡΠ° RSACryptoServiceProvider Ρ Π·Π°Π΄Π°Π½Π½ΡΠΌ ΠΈΠΌΠ΅Π½Π΅ΠΌ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ° Π΄Π»Ρ Ρ ΡΠ°Π½Π΅Π½ΠΈΡ ΠΊΠ»ΡΡΠ΅Π²ΠΎΠΉ ΠΏΠ°ΡΡ Π²Π½Π°ΡΠ°Π»Π΅ Π±ΡΠ΄Π΅Ρ ΠΏΡΠΎΠ²Π΅ΡΠ΅Π½ΠΎ, ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ Π»ΠΈ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ Ρ Π΄Π°Π½Π½ΡΠΌ ΠΈΠΌΠ΅Π½Π΅ΠΌ ΠΈ ΠΏΡΠΈΡΡΡΡΡΠ²ΡΠ΅Ρ Π»ΠΈ Π² Π½Π΅ΠΌ ΠΊΠ»ΡΡΠ΅Π²Π°Ρ ΠΏΠ°ΡΠ°. ΠΡΠΈ Π½Π°Π»ΠΈΡΠΈΠΈ ΠΊΠ»ΡΡΠ΅ΠΉ Π½ΠΎΠ²ΡΠ΅ ΠΊΠ»ΡΡΠΈ Π½Π΅ Π±ΡΠ΄ΡΡ ΡΠ³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°Π½Ρ. ΠΡΠ»ΠΈ ΠΆΠ΅ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ ΠΈΠ»ΠΈ ΠΊΠ»ΡΡΠΈ ΠΎΡΡΡΡΡΡΠ²ΡΡΡ, ΡΠΎ Π±ΡΠ΄Π΅Ρ ΡΠΎΠ·Π΄Π°Π½ Π½ΠΎΠ²ΡΠΉ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ ΠΈ Π² Π½Π΅Π³ΠΎ Π±ΡΠ΄Π΅Ρ ΡΠ³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°Π½Π° Π½ΠΎΠ²Π°Ρ ΠΊΠ»ΡΡΠ΅Π²Π°Ρ ΠΏΠ°ΡΠ°. ΠΡΠ»ΠΈ Π½Π΅ ΡΠΊΠ°Π·ΡΠ²Π°ΡΡ ΠΈΠΌΡ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ°, ΠΈΠ»ΠΈ ΠΆΠ΅ Π½Π΅ ΡΠΊΠ°Π·ΡΠ²Π°ΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² ΠΏΡΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΠ° ΠΊΠ»Π°ΡΡΠ° RSACryptoServiceProvider, ΡΠΎ Π±ΡΠ΄Π΅Ρ ΡΠ³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°Π½Π° Π½ΠΎΠ²Π°Ρ ΠΊΠ»ΡΡΠ΅Π²Π°Ρ ΠΏΠ°ΡΠ°, ΠΊΠΎΡΠΎΡΠ°Ρ Π½Π΅ Π±ΡΠ΄Π΅Ρ Ρ ΡΠ°Π½ΠΈΡΡΡΡ Π² ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ΅ ΠΊΡΠΈΠΏΡΠΎΠ³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΠΏΡΠΎΠ²Π°ΠΉΠ΄Π΅ΡΠ°. ΠΡΠ»ΠΈ ΠΏΡΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΠ° ΠΊΠ»Π°ΡΡΠ° RSACrypto ServiceProvider ΡΠΊΠ°Π·Π°ΡΡ ΠΈΠΌΡ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ°, ΡΠΎ ΠΊΠ»ΡΡΠ΅Π²Π°Ρ ΠΏΠ°ΡΠ° Π±ΡΠ΄Π΅Ρ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡΡΡ Π² Π½Π΅ΠΌ. ΠΠ»ΡΡΠΈ Ρ ΡΠ°Π½ΡΡΡΡ Π² ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ΅ Π΄ΠΎ ΡΠ΅Ρ ΠΏΠΎΡ, ΠΏΠΎΠΊΠ° ΠΎΠ½ΠΈ Π½Π΅ Π±ΡΠ΄ΡΡ ΡΠ²Π½ΠΎ ΡΠ΄Π°Π»Π΅Π½Ρ. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, Π΅ΡΠ»ΠΈ Π·Π°Π΄Π°ΡΡ ΠΈΠΌΡ Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΊΡΠΈΠΏΡΠΎΠ³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ°, ΡΠΎΠ·Π΄Π°ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡ ΠΊΠ»Π°ΡΡΠ° RSACryptoServiceProvider, ΡΠ³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°ΡΡ ΠΊΠ»ΡΡΠ΅Π²ΡΡ ΠΏΠ°ΡΡ ΠΈ Π·Π°ΠΊΡΡΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΡΠΎ ΠΊΠ»ΡΡΠΈ ΠΎΡΡΠ°Π½ΡΡΡΡ Π² ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ΅ ΠΈ ΠΏΡΠΈ ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΌ Π·Π°ΠΏΡΡΠΊΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΊΠ»ΡΡΠ΅Π²Π°Ρ ΠΏΠ°ΡΠ° ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½Π° ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎ.
ΠΠ΄Π½ΠΎΠΉ ΠΈΠ· ΠΏΡΠΎΠ±Π»Π΅ΠΌ, Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡΡΠΈΡ ΠΏΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΎΠ², ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΈΡ ΡΠ½ΠΈΠΊΠ°Π»ΡΠ½ΠΎΠ΅ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠ΅. ΠΠ»Ρ ΡΡΠΈΡ ΡΠ΅Π»Π΅ΠΉ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ Ρ ΠΎΡΠΎΡΠΈΠΌ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ΠΌ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΈΡ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠ΅ Ρ ΠΏΠΎΠΌΠΎΡΡΡ GUID (Global universal Identifier). ΠΠΎΠ»ΡΡΠΈΡΡ GUID ΠΌΠΎΠΆΠ½ΠΎ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΠΈΠ»ΠΈΡΡ ΠΈΠ· Visual Studio.
ΠΠ° Ρ ΡΠ°Π½Π΅Π½ΠΈΠ΅ ΠΊΠ»ΡΡΠ΅ΠΉ Π² ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ΅ ΠΊΡΠΈΠΏΡΠΎΠ³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΠΏΡΠΎΠ²Π°ΠΉΠ΄Π΅ΡΠ° ΠΎΡΠ²Π΅ΡΠ°Π΅Ρ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ PersistKeyInCsp. ΠΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ PersistKeyInCsp = true. ΠΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ Π½ΠΎΠ²ΡΠΉ ΠΊΠ»ΡΡ, ΡΠ³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ Π² ΠΊΡΠΈΠΏΡΠΎΠ³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠΌ ΠΏΡΠΎΠ²Π°ΠΉΠ΄Π΅ΡΠ΅, ΡΠΎΡ ΡΠ°Π½ΡΠ΅ΡΡΡ Π² ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ΅. ΠΡΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° Π½Π° false ΠΊΠ»ΡΡΠ΅Π²Π°Ρ ΠΏΠ°ΡΠ° Π±ΠΎΠ»Π΅Π΅ Π½Π΅ Ρ ΡΠ°Π½ΠΈΡΡΡ Π² ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ΅, Π½ΠΎ ΠΎΡΡΠ°Π΅ΡΡΡ Π΄ΠΎΡΡΡΠΏΠ½ΠΎΠΉ Π² ΡΠ°ΠΌΠΎΠΌ ΠΎΠ±ΡΠ΅ΠΊΡΠ΅ ΠΊΠ»Π°ΡΡΠ° RSACryptoServiceProvider Π΄ΠΎ Π΅Π³ΠΎ ΡΠ½ΠΈΡΡΠΎΠΆΠ΅Π½ΠΈΡ. ΠΠ»Ρ ΡΠ½ΠΈΡΡΠΎΠΆΠ΅Π½ΠΈΡ ΠΊΠ»ΡΡΠ΅Π²ΠΎΠΉ ΠΏΠ°ΡΡ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΡΠΎΠ·Π΄Π°ΡΡ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ ΠΊΠ»Π°ΡΡΠ° RSACryptoServiceProvider Ρ Π·Π°Π΄Π°Π½Π½ΡΠΌ ΠΈΠΌΠ΅Π½Π΅ΠΌ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ°, ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ PersistKeyInCsp Π½Π° false ΠΈ ΠΎΡΠΈΡΡΠΈΡΡ ΡΠ΅ΡΡΡΡΡ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠΌ ΠΊΠ»Π°ΡΡΠ°, Π²ΡΠ·Π²Π°Π² ΠΌΠ΅ΡΠΎΠ΄ Clear.
ΠΠ»Π°ΡΡ RSACryptoServiceProvider ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΏΠΎΠ΄ΠΏΠΈΡΡΠ²Π°ΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΠ΅ Π΄Π°Π½Π½ΡΠ΅. ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½Ρ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ ΠΌΠ΅ΡΠΎΠ΄Ρ:
β’ SignHash (byte[] hash, OID AlgOID);
β’ SignData (byte[] data, HashAlgirithm hm).
ΠΠΎΠ΄ΠΏΠΈΡΡΠ²Π°Π΅ΠΌΡΠ΅ Π΄Π°Π½Π½ΡΠ΅ ΠΈΠ»ΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Ρ Π΅ΡΠ° Π΄Π°Π½Π½ΡΡ Π΄ΠΎΠ»ΠΆΠ½Ρ Π±ΡΡΡ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½Ρ Π² Π²ΠΈΠ΄Π΅ ΠΌΠ°ΡΡΠΈΠ²Π° Π±Π°ΠΉΡ.
ΠΠ΅ΡΠ²ΡΠΉ ΠΌΠ΅ΡΠΎΠ΄ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΏΠΎΠ΄ΠΏΠΈΡΡΠ²Π°ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Ρ Π΅ΡΠ° Π΄Π°Π½Π½ΡΡ . ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ ΠΏΠ΅ΡΠ΅Π΄ ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ΠΌ ΠΏΠΎΠ΄ΠΏΠΈΡΠΈ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΠΏΡΠ΅Π΄Π²Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎ Π²ΡΡΠΈΡΠ»ΠΈΡΡ Ρ Π΅Ρ ΠΏΠΎΠ΄ΠΏΠΈΡΡΠ²Π°Π΅ΠΌΡΡ Π΄Π°Π½Π½ΡΡ ΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ Π² ΠΌΠ΅ΡΠΎΠ΄ SignHash Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Ρ Π΅ΡΠ° ΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΠ½ΡΠΉ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ (OID) ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΠΎΠ³ΠΎ Π°Π»Π³ΠΎΡΠΈΡΠΌΠ° Ρ Π΅ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ. ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ ΠΏΡΠΈ ΡΠΎΡΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠΈ ΠΏΠΎΠ΄ΠΏΠΈΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π²ΡΠΏΠΎΠΌΠΎΠ³Π°ΡΠ΅Π»ΡΠ½ΡΠΉ ΠΊΠ»Π°ΡΡ CryptoConfig. ΠΠ½ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΏΠΎΠ»ΡΡΠ°ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠ½ΡΠΉ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ ΠΊΡΠΈΠΏΡΠΎΠ³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ Π°Π»Π³ΠΎΡΠΈΡΠΌΠ°, Π° ΡΠ°ΠΊΠΆΠ΅ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ ΠΊΠ»Π°ΡΡΠ°, ΡΠ΅Π°Π»ΠΈΠ·ΡΡΡΠ΅Π³ΠΎ ΠΊΡΠΈΠΏΡΠΎΠ³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΉ Π°Π»Π³ΠΎΡΠΈΡΠΌ, ΠΏΠΎ ΡΡΡΠΎΠΊΠΎΠ²ΠΎΠΌΡ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΡ Π°Π»Π³ΠΎΡΠΈΡΠΌΠ°.
ΠΡΠΎΡΠΎΠΉ ΠΌΠ΅ΡΠΎΠ΄ ΡΠ°ΠΌ Π²ΡΡΠΈΡΠ»ΡΠ΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Ρ Π΅ΡΠ° Π΄Π°Π½Π½ΡΡ ΠΈ ΠΏΠΎΠ΄ΠΏΠΈΡΡΠ²Π°Π΅Ρ Π΅Π³ΠΎ. ΠΠ»Ρ Π΅Π³ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ ΠΏΠΎΠ΄ΠΏΠΈΡΡΠ²Π°Π΅ΠΌΡΠ΅ Π΄Π°Π½Π½ΡΠ΅ Π² ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ ΠΊΠ»Π°ΡΡΠ°, ΡΠ΅Π°Π»ΠΈΠ·ΡΡΡΠ΅Π³ΠΎ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Π°Π»Π³ΠΎΡΠΈΡΠΌΠΎΠ² Ρ Π΅ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ, Ρ. Π΅. Π² Π»ΡΠ±ΠΎΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ ΠΊΠ»Π°ΡΡΠ°, Π½Π°ΡΠ»Π΅Π΄ΡΠ΅ΠΌΠΎΠ³ΠΎ ΠΎΡ ΠΊΠ»Π°ΡΡΠ° HashAlgorithm. Π ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Ρ Π΅ΡΠ° Π΄Π°Π½Π½ΡΡ Π±ΡΠ΄Π΅Ρ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΎ ΡΠ°ΠΌΠΈΠΌ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠΌ ΠΊΠ»Π°ΡΡΠ° RSACryptoServiceProvider.
ΠΠ»Ρ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ ΡΠΈΡΡΠΎΠ²ΠΎΠΉ ΠΏΠΎΠ΄ΠΏΠΈΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ ΠΌΠ΅ΡΠΎΠ΄Ρ VerifyHash ΠΈ VerifyData.
ΠΠ±Π° ΠΌΠ΅ΡΠΎΠ΄Π° Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π±ΡΠ»Π΅Π²ΠΎΠ³ΠΎ ΡΠΈΠΏΠ°. Π ΡΠ»ΡΡΠ°Π΅ Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ ΠΏΠΎΠ΄ΠΏΠΈΡΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΡΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ true, Π² ΡΠ»ΡΡΠ°Π΅ Π΅Π΅ Π½Π΅Π²Π΅ΡΠ½ΠΎΡΡΠΈ — false.
ΠΠ΅ΡΠΎΠ΄ VerifyHash ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π² ΡΠ»ΡΡΠ°Π΅, ΠΊΠΎΠ³Π΄Π° Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Ρ Π΅ΡΠ° Π΄Π°Π½Π½ΡΡ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΎ ΡΠ°Π½Π΅Π΅. ΠΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ ΠΌΠ΅ΡΠΎΠ΄Π° VerifyData ΠΎΠ±ΡΠ΅ΠΊΡ ΠΊΠ»Π°ΡΡΠ° RSACryptoServiceProvider ΡΠ°ΠΌ Π²ΡΡΠΈΡΠ»ΠΈΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Ρ Π΅ΡΠ° Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠ° ΠΊΠ»Π°ΡΡΠ°, ΡΠ΅Π°Π»ΠΈΠ·ΡΡΡΠ΅Π³ΠΎ Π°Π»Π³ΠΎΡΠΈΡΠΌ Ρ Π΅ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ. Π Π΄Π°Π½Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Π±Π»Π°Π³ΠΎΠ΄Π°ΡΡ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ΅ ΠΊΡΠΈΠΏΡΠΎΠ³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ Microsoft .NET Framework Π²ΠΌΠ΅ΡΡΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ° ΠΊΠ»Π°ΡΡΠ° SHA1Managed ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡ ΠΊΠ»Π°ΡΡΠ° SHA1CryptoServiceProvider. ΠΠ΅ΡΠΌΠΎΡΡΡ Π½Π° ΡΡΠΎ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ ΠΏΠΎΠ΄ΠΏΠΈΡΠΈ Π±ΡΠ΄ΡΡ ΠΈΠ΄Π΅Π½ΡΠΈΡΠ½ΡΠΌΠΈ.
ΠΠ»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΈ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ ΡΠΈΡΡΠΎΠ²ΠΎΠΉ ΠΏΠΎΠ΄ΠΏΠΈΡΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ°ΠΊΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΡΠ΅ ΠΊΠ»Π°ΡΡΡ — ΡΠΎΡΠΌΠ°ΡΠ΅ΡΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠ°ΠΌΠΈ ΡΠΎΡΠΌΠΈΡΡΡΡ ΠΈΡΠΎΠ³ΠΎΠ²ΡΠΉ Π½Π°Π±ΠΎΡ Π΄Π°Π½Π½ΡΡ Π²ΠΌΠ΅ΡΡΠ΅ Ρ ΡΠΈΡΡΠΎΠ²ΠΎΠΉ ΠΏΠΎΠ΄ΠΏΠΈΡΡΡ, ΡΠ°ΠΌΠΈ ΡΠ°ΡΠΏΠ°ΠΊΠΎΠ²ΡΠ²Π°ΡΡ ΠΈ ΠΏΡΠΎΠ²Π΅ΡΡΡΡ ΡΠΈΡΡΠΎΠ²ΡΡ ΠΏΠΎΠ΄ΠΏΠΈΡΡ ΠΏΠΎΠ΄ ΠΏΠΎΠ»ΡΡΠ΅Π½Π½ΡΠΌΠΈ Π΄Π°Π½Π½ΡΠΌΠΈ.
ΠΠ»ΡΡΠΈ Π°Π»Π³ΠΎΡΠΈΡΠΌΠ° RSA ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΡΡ ΡΠΎΠ±ΠΎΠΉ Π½Π°Π±ΠΎΡ ΠΌΠ°ΡΠ΅ΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΡ Π²Π΅Π»ΠΈΡΠΈΠ½: ΠΌΠΎΠ΄ΡΠ»Ρ, ΡΠΊΡΠΏΠΎΠ½Π΅Π½ΡΠ°, ΠΊΠΎΡΡΡΠΈΡΠΈΠ΅Π½ΡΡ D ΠΈ Q. ΠΡΠΊΡΡΡΡΠΌ ΠΊΠ»ΡΡΠΎΠΌ ΡΠ»ΡΠΆΠ°Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΌΠΎΠ΄ΡΠ»Ρ ΠΈ ΡΠΊΡΠΏΠΎΠ½Π΅Π½ΡΡ, Π° ΠΊΠΎΡΡΡΠΈΡΠΈΠ΅Π½ΡΡ D ΠΈ Q Ρ Π°ΡΠ°ΠΊΡΠ΅ΡΠΈΠ·ΡΡΡ ΡΠ΅ΠΊΡΠ΅ΡΠ½ΡΠΉ ΠΊΠ»ΡΡ. Π ΡΡΡΡΠΊΡΡΡΠ΅ RSAParameters ΠΊΠ»ΡΡΠΈ Ρ ΡΠ°Π½ΡΡΡΡ Π² Π²ΠΈΠ΄Π΅ Π±Π°ΠΉΡΠΎΠ²ΡΡ ΠΌΠ°ΡΡΠΈΠ²ΠΎΠ². ΠΠΌΠ΅Π½Π° ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡ ΠΈΠΌΠ΅Π½Π°ΠΌ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² Π² Π°Π»Π³ΠΎΡΠΈΡΠΌΠ΅ RSA. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ: (D, Q, ND, NQ, Modulus, Exponent). ΠΠ»Ρ ΡΠΊΡΠΏΠΎΡΡΠ° ΠΈ ΠΈΠΌΠΏΠΎΡΡΠ° ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ ΠΌΠ΅ΡΠΎΠ΄Ρ ExportParameters ΠΈ ImportParameters ΠΊΠ»Π°ΡΡΠ° RSACryptoServiceProvider. ΠΡΠ»ΠΈ ΠΏΡΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΠΈ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠ° ΠΊΠ»Π°ΡΡΠ° Π·Π°Π΄Π°ΡΡ ΠΈΠΌΡ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ° ΠΈ ΠΏΡΠΈΡΠ²ΠΎΠΈΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠ²ΠΎΠΉΡΡΠ²Π° PersistKeyInCsp = true, Π° Π·Π°ΡΠ΅ΠΌ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΌΠ΅ΡΠΎΠ΄Π° ImportParameters Π·Π°Π΄Π°ΡΡ Π½ΠΎΠ²ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΊΠ»ΡΡΠ°, ΡΠΎ ΠΎΠ½ΠΎ Π½Π΅ Π±ΡΠ΄Π΅Ρ ΡΠΎΡ ΡΠ°Π½Π΅Π½ΠΎ Π² ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ΅ ΠΊΡΠΈΠΏΡΠΎΠ³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΠΏΡΠΎΠ²Π°ΠΉΠ΄Π΅ΡΠ° ΠΈ ΠΏΡΠΈ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎΠΌ Π·Π°ΠΏΡΡΠΊΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π±ΡΠ΄Π΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ ΡΠ°Π½Π΅Π΅ ΡΠ³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°Π½Π½Π°Ρ ΠΊΠ»ΡΡΠ΅Π²Π°Ρ ΠΏΠ°ΡΠ°. ΠΡΠΈ ΡΠΊΡΠΏΠΎΡΡΠ΅ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΡΠΊΡΡΡΠΎΠ³ΠΎ ΠΊΠ»ΡΡΠ° Π·Π°Π΄Π°ΡΡΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ Exponent ΠΈ Modulus, Π° ΠΎΡΡΠ°Π»ΡΠ½ΡΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ ΡΠ°Π²Π½Ρ null.
1.3 ΠΠ»Π°ΡΡΡ Π°Π»Π³ΠΎΡΠΈΡΠΌΠΎΠ² Ρ Π΅ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ
Π₯ΡΡ-ΡΡΠ½ΠΊΡΠΈΠΈ ΡΠ²Π»ΡΡΡΡΡ ΡΡΠ½Π΄Π°ΠΌΠ΅Π½ΡΠ°Π»ΡΠ½ΡΠΌ ΠΏΠΎΠ½ΡΡΠΈΠ΅ΠΌ ΡΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΊΡΠΈΠΏΡΠΎΠ³ΡΠ°ΡΠΈΠΈ. ΠΡΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°ΡΡ Π΄Π²ΠΎΠΈΡΠ½ΡΠ΅ ΡΡΡΠΎΠΊΠΈ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ»ΡΠ½ΠΎΠΉ Π΄Π»ΠΈΠ½Ρ Π² ΠΊΠΎΡΠΎΡΠΊΠΈΠ΅ Π΄Π²ΠΎΠΈΡΠ½ΡΠ΅ ΡΡΡΠΎΠΊΠΈ ΡΠΈΠΊΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠΉ Π΄Π»ΠΈΠ½Ρ, Π½Π°Π·ΡΠ²Π°Π΅ΠΌΡΠ΅ Ρ ΡΡ-Π·Π½Π°ΡΠ΅Π½ΠΈΡΠΌΠΈ. Π‘Π²ΠΎΠΉΡΡΠ²ΠΎ ΠΊΡΠΈΠΏΡΠΎΠ³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠΉ Ρ ΡΡ-ΡΡΠ½ΠΊΡΠΈΠΈ ΡΠΎΡΡΠΎΠΈΡ Π² ΡΠΎΠΌ, ΡΡΠΎ ΠΏΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ΄ΠΎΠ±ΡΠ°ΡΡ Π΄Π²Π° ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ, ΠΈΠΌΠ΅ΡΡΠΈΡ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎΠ΅ Ρ ΡΡ-Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅. Π₯ΡΡ-ΡΡΠ½ΠΊΡΠΈΠΈ ΠΎΠ±ΡΡΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ Ρ ΡΠΈΡΡΠΎΠ²ΡΠΌΠΈ ΠΏΠΎΠ΄ΠΏΠΈΡΡΠΌΠΈ, Π° ΡΠ°ΠΊΠΆΠ΅ Π΄Π»Ρ ΠΊΠΎΠ½ΡΡΠΎΠ»Ρ ΡΠ΅Π»ΠΎΡΡΠ½ΠΎΡΡΠΈ Π΄Π°Π½Π½ΡΡ .
Π₯ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΡΠ½ΠΈΠΊΠ°Π»ΡΠ½ΠΎΠ³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΡΠΈΠΊΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠΉ Π΄Π»ΠΈΠ½Ρ, ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΡΡΠ΅Π³ΠΎ Π±ΠΎΠ»ΡΡΠΎΠΉ ΠΎΠ±ΡΠ΅ΠΌ Π΄Π°Π½Π½ΡΡ . Π₯ΡΡΠΈ Π΄Π²ΡΡ Π½Π°Π±ΠΎΡΠΎΠ² Π΄Π°Π½Π½ΡΡ Π΄ΠΎΠ»ΠΆΠ½Ρ ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π² ΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅, Π΅ΡΠ»ΠΈ ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡΡ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠ΅ Π΄Π°Π½Π½ΡΠ΅. ΠΠ΅Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Π΄Π°Π½Π½ΡΡ ΠΏΡΠΈΠ²ΠΎΠ΄ΡΡ ΠΊ ΡΡΡΠ΅ΡΡΠ²Π΅Π½Π½ΡΠΌ ΠΈ Π½Π΅ΠΏΡΠ΅Π΄ΡΠΊΠ°Π·ΡΠ΅ΠΌΡΠΌ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡΠΌ Π² Ρ ΡΡΠ΅.
ΠΠ»Ρ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΊΡΠΈΠΏΡΠΎΠ³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ Ρ Π΅ΡΠ° Π΄Π°Π½Π½ΡΡ Π² Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ΅ ΠΊΠ»Π°ΡΡΠΎΠ² .NET Framework ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ΠΎ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΊΠ»Π°ΡΡΠΎΠ². Π§Π°ΡΡΡ ΠΈΠ· Π½ΠΈΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ Π²ΡΠ·ΠΎΠ²Ρ ΠΊΡΠΈΠΏΡΠΎΠ³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΉ Microsoft Crypto API, Π° ΡΠ°ΡΡΡ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²ΡΠ²Π°Π΅Ρ Π°Π»Π³ΠΎΡΠΈΡΠΌΡ ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ Π½Π° ΡΠΏΡΠ°Π²Π»ΡΠ΅ΠΌΠΎΠΌ ΠΊΠΎΠ΄Π΅.
ΠΡΠ΅ ΠΊΠ»Π°ΡΡΡ, ΡΠ΅Π°Π»ΠΈΠ·ΡΡΡΠΈΠ΅ Π°Π»Π³ΠΎΡΠΈΡΠΌΡ Ρ Π΅ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ, Π΄ΠΎΠ»ΠΆΠ½Ρ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΡΡΡ ΠΎΡ ΠΊΠ»Π°ΡΡΠ° HashAlgorithm. Π ΡΡΠΎΠΌ ΠΊΠ»Π°ΡΡΠ΅ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΉ ΠΌΠ΅ΡΠΎΠ΄ Π²ΡΠ΅Ρ Π°Π»Π³ΠΎΡΠΈΡΠΌΠΎΠ² Ρ Π΅ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ — ComputeHash. ΠΠ΅ΡΠΎΠ΄ Π±Π΅ΡΠ΅Ρ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² Π΄Π°Π½Π½ΡΠ΅, ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½Π½ΡΠ΅ Π² Π²ΠΈΠ΄Π΅ Π±Π°ΠΉΡΠΎΠ²ΠΎΠ³ΠΎ ΠΌΠ°ΡΡΠΈΠ²Π°, ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΈΡ Ρ Π΅ΡΠ° ΡΠ°ΠΊΠΆΠ΅ Π² Π²ΠΈΠ΄Π΅ ΠΌΠ°ΡΡΠΈΠ²Π° Π±Π°ΠΉΡ.
ΠΠ»Π°ΡΡ SHA1CryptoServiceProvider ΠΏΡΠΈ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Ρ Π΅ΡΠ° ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΠΌΠ΅ΡΠΎΠ΄ Crypto API ΠΈ ΠΎΠ±ΡΠ°ΡΠ°Π΅ΡΡΡ ΠΊ ΠΊΡΠΈΠΏΡΠΎΠ³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠΌΡ ΠΏΡΠΎΠ²Π°ΠΉΠ΄Π΅ΡΡ.
ΠΠ½Π°Π»ΠΎΠ³ΠΈΡΠ½ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π²ΡΡΠΈΡΠ»ΠΈΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Ρ Π΅ΡΠ° Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΊΠ»Π°ΡΡΠ° SHA1Managed, ΠΊΠΎΡΠΎΡΡΠΉ Π½Π°ΠΏΠΈΡΠ°Π½ Π½Π° ΡΠΏΡΠ°Π²Π»ΡΠ΅ΠΌΠΎΠΌ ΠΊΠΎΠ΄Π΅ ΠΈ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ Π½ΠΈΠΊΠ°ΠΊΠΈΡ Π²Π½Π΅ΡΠ½ΠΈΡ ΠΊΡΠΈΠΏΡΠΎΠ³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ.
SHA1Managed hash = SHA1Managed. Create ();
byte[] outputBytes = hash. ComputeHash (inputBytes);
ΠΠ»Π°ΡΡ SHA256 ΡΠ²Π»ΡΠ΅ΡΡΡ Π°Π±ΡΡΡΠ°ΠΊΡΠ½ΡΠΌ ΠΈ Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½Π°Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΡΡΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ° — SHA256Managed — Π²ΡΡΠΈΡΠ»ΡΠ΅Ρ Ρ ΡΡ Π΄Π»Ρ Π²Ρ ΠΎΠ΄Π½ΡΡ Π΄Π°Π½Π½ΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΠΏΡΠ°Π²Π»ΡΠ΅ΠΌΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ. ΠΠ°ΠΊ Π²ΠΈΠ΄Π½ΠΎ ΠΈΠ· Π½Π°Π·Π²Π°Π½ΠΈΡ, ΡΠ°Π·ΠΌΠ΅Ρ Ρ ΡΡΠ° Π΄Π»Ρ Π°Π»Π³ΠΎΡΠΈΡΠΌΠ° SHA256Managed ΡΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ 256 Π±ΠΈΡ.
ΠΡΠ΅ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ Ρ ΡΡ-Π°Π»Π³ΠΎΡΠΈΡΠΌΠ° MD5 Π½Π°ΡΠ»Π΅Π΄ΡΡΡΡΡ ΠΎΡ Π°Π±ΡΡΡΠ°ΠΊΡΠ½ΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ° MD5. Π Π°Π·ΠΌΠ΅Ρ Ρ ΡΡΠ° Π΄Π»Ρ Π΄Π°Π½Π½ΠΎΠ³ΠΎ Π°Π»Π³ΠΎΡΠΈΡΠΌΠ° ΡΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ 128 Π±ΠΈΡ. ΠΠ΅ΡΠΎΠ΄Ρ ComputeHash ΠΊΠ»Π°ΡΡΠ° MD5 Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡ Ρ ΡΡ Π² Π²ΠΈΠ΄Π΅ 16-Π±Π°ΠΉΡΠΎΠ²ΠΎΠ³ΠΎ ΠΌΠ°ΡΡΠΈΠ²Π°. Π‘Π»Π΅Π΄ΡΠ΅Ρ ΠΈΠΌΠ΅ΡΡ Π² Π²ΠΈΠ΄Ρ, ΡΡΠΎ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ MD5 ΡΠΎΡΠΌΠΈΡΡΡΡ 32-ΡΠΈΠΌΠ²ΠΎΠ»ΡΠ½ΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Ρ ΡΡΠ° Π² ΡΠ΅ΡΡΠ½Π°Π΄ΡΠ°ΡΠ΅ΡΠΈΡΠ½ΠΎΠΌ ΡΠΎΡΠΌΠ°ΡΠ΅. ΠΠ»Ρ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠ΅Π½ΠΈΡ ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΠΎΡΡΠΈ Ρ ΡΠ°ΠΊΠΈΠΌΠΈ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡΠΌΠΈ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ, Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄Π°ΠΌΠΈ ComputeHash, Π² ΡΠ΅ΡΡΠ½Π°Π΄ΡΠ°ΡΠ΅ΡΠΈΡΠ½ΠΎΠΌ ΡΠΎΡΠΌΠ°ΡΠ΅.
2. ΠΠ»Π°ΡΡΡ Π΄Π»Ρ ΡΠΈΡΡΠΎΠ²Π°Π½ΠΈΡ ΠΈ ΡΠ°ΡΡΠΈΡΡΠΎΠ²Π°Π½ΠΈΡ Π΄Π°Π½Π½ΡΡ
ΠΠ»Π°ΡΡΡ-ΡΠΎΡΠΌΠ°ΡΠ΅ΡΡ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡ Π·Π°ΡΠΈΡΡΠΎΠ²Π°ΡΡ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ Π΄Π°Π½Π½ΡΠ΅ Π½Π° ΠΎΡΠΊΡΡΡΠΎΠΌ ΠΊΠ»ΡΡΠ΅, Π° ΠΊΠ»Π°ΡΡΡ-Π΄Π΅ΡΠΎΡΠΌΠ°ΡΠ΅ΡΡ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡ ΡΠ°ΡΡΠΈΡΡΠΎΠ²Π°ΡΡ Π΄Π°Π½Π½ΡΠ΅ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ΅Π³ΠΎ ΡΠ΅ΠΊΡΠ΅ΡΠ½ΠΎΠ³ΠΎ ΠΊΠ»ΡΡΠ°. ΠΠ°Π½Π½ΡΠ΅ ΠΊΠ»Π°ΡΡΡ ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½Ρ Π΄Π»Ρ ΠΎΠ±ΠΌΠ΅Π½Π° Π½Π΅ΠΊΠΎΡΠΎΡΠΎΠΉ ΡΠ΅ΠΊΡΠ΅ΡΠ½ΠΎΠΉ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠ΅ΠΉ. Π ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΡΠ°ΠΊΠΎΠΉ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ ΠΌΠΎΠ³ΡΡ Π²ΡΡΡΡΠΏΠ°ΡΡ ΡΠ΅ΠΊΡΠ΅ΡΠ½ΡΠ΅ ΠΊΠ»ΡΡΠΈ Π΄Π»Ρ ΡΠΈΠΌΠΌΠ΅ΡΡΠΈΡΠ½ΡΡ Π°Π»Π³ΠΎΡΠΈΡΠΌΠΎΠ² ΡΠΈΡΡΠΎΠ²Π°Π½ΠΈΡ ΠΈΠ»ΠΈ ΠΆΠ΅ Π»ΡΠ±ΡΠ΅ Π΄ΡΡΠ³ΠΈΠ΅ ΡΠ΅ΠΊΡΠ΅ΡΠ½ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅.
ΠΠ»Ρ ΡΠΎΡΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π·Π°ΡΠΈΡΡΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ ΠΊΠ»Π°ΡΡΡ, Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½Π½ΡΠ΅ ΠΎΡ ΠΊΠ»Π°ΡΡΠ° AsymmetricKeyExchangeFormatter. ΠΠ»Ρ ΡΠ°ΡΡΠΈΡΡΠΎΠ²Π°Π½ΠΈΡ Π΄Π°Π½Π½ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ ΠΊΠ»Π°ΡΡΡ, Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½Π½ΡΠ΅ ΠΎΡ ΠΊΠ»Π°ΡΡΠ° AsymmetricKeyExchangeDeformatter.
Π Π²Π΅ΡΡΠΈΠΈ Microsoft .NET Framework 2.0 ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ Π΄Π²Π° ΠΊΠ»Π°ΡΡΠ° Π΄Π»Ρ ΡΠΈΡΡΠΎΠ²Π°Π½ΠΈΡ ΡΠ΅ΠΊΡΠ΅ΡΠ½ΡΡ Π΄Π°Π½Π½ΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Π°Π»Π³ΠΎΡΠΈΡΠΌΠ° RSA:
β’ RSAOAEPKeyExchangeFormatter,
β’ RSAPKCS1KeyExchangeFormatter;
ΠΈ Π΄Π²Π° ΠΊΠ»Π°ΡΡΠ° Π΄Π»Ρ ΡΠ°ΡΡΠΈΡΡΠΎΠ²Π°Π½ΠΈΡ:
β’ RSAOAEPKeyExchangeDeformatter,
β’ RSAPKCS1KeyExchangeDeformatter.
ΠΠ»Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΈ Π΄ΡΡΠ³ΠΈΡ Π°ΡΠΈΠΌΠΌΠ΅ΡΡΠΈΡΠ½ΡΡ Π°Π»Π³ΠΎΡΠΈΡΠΌΠΎΠ² ΠΎΠ±ΠΌΠ΅Π½Π° ΠΊΠ»ΡΡΠ°ΠΌΠΈ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΡ ΠΊΠ»Π°ΡΡ ΡΠΈΡΡΠΎΠ²Π°Π½ΠΈΡ Π΄Π°Π½Π½ΡΡ ΠΎΡ ΠΊΠ»Π°ΡΡΠ° AsymmetricKeyExchange Formatter ΠΈ ΠΊΠ»Π°ΡΡ ΡΠ°ΡΡΠΈΡΡΠΎΠ²Π°Π½ΠΈΡ Π΄Π°Π½Π½ΡΡ ΠΎΡ ΠΊΠ»Π°ΡΡΠ° AsymmetricKeyExchangeDeformatter.
ΠΠ»Π°ΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ Π΄Π»Ρ ΠΎΠ±ΠΌΠ΅Π½Π° ΡΠ΅ΠΊΡΠ΅ΡΠ½ΠΎΠΉ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠ΅ΠΉ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Π°Π»Π³ΠΎΡΠΈΡΠΌΠ° RSA. ΠΠ»Ρ ΠΎΠ±ΠΌΠ΅Π½Π° Π΄Π°Π½Π½ΡΠΌΠΈ ΠΊΠ»Π°ΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡ ΡΠΎΡΠΌΠ°Ρ PKCS #1.
ΠΠ»Ρ ΡΠΈΡΡΠΎΠ²Π°Π½ΠΈΡ Π΄Π°Π½Π½ΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΊΠ»Π°ΡΡΠ° RSAPKCS1KeyExchangeFormatter Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ:
1) Π‘ΠΎΠ·Π΄Π°ΡΡ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ ΠΊΠ»Π°ΡΡΠ°.
ΠΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ ΠΎΡΠΊΡΡΡΡΠΉ ΠΊΠ»ΡΡ Π΄Π»Ρ ΡΠΈΡΡΠΎΠ²Π°Π½ΠΈΡ Π΄Π°Π½Π½ΡΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅ΡΠ΅Π΄Π°Π² Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠ° ΠΎΠ±ΡΠ΅ΠΊΡ, ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΡΡΠΈΠΉ Π°Π»Π³ΠΎΡΠΈΡΠΌ RSA, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠΈΠΉ ΠΎΡΠΊΡΡΡΡΠΉ ΠΊΠ»ΡΡ ΠΈΠ»ΠΈ ΠΆΠ΅ Π²ΡΠ·Π²Π°Π² ΠΌΠ΅ΡΠΎΠ΄ SetKey. ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ, ΠΊΠ°ΠΊΠΎΠΉ Π΄Π°ΡΡΠΈΠΊ ΡΠ»ΡΡΠ°ΠΉΠ½ΡΡ ΡΠΈΡΠ΅Π» ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΏΡΠΈ ΡΠΎΡΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠΈ Π·Π°ΡΠΈΡΡΠΎΠ²Π°Π½Π½ΡΡ Π΄Π°Π½Π½ΡΡ . ΠΡΠ»ΠΈ Π½Π΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ Rnd, ΡΠΎ Π΄Π°ΡΡΠΈΠΊ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ.
2) ΠΠ°ΡΠΈΡΡΠΎΠ²Π°ΡΡ ΠΊΠ»ΡΡΠ΅Π²ΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ.
ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΠΌΠ΅ΡΠΎΠ΄ CreateKeyExchange. Π ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° ΠΎΠ½ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ Π΄Π°Π½Π½ΡΠ΅, ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΠ΅ Π·Π°ΡΠΈΡΡΠΎΠ²Π°ΡΡ.
ΠΠ»Ρ ΡΠ°ΡΡΠΈΡΡΠΎΠ²Π°Π½ΠΈΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ:
1) Π‘ΠΎΠ·Π΄Π°ΡΡ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ ΠΊΠ»Π°ΡΡΠ° RSAPKCS1KeyExchangeDeformatter.
ΠΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ ΡΠ΅ΠΊΡΠ΅ΡΠ½ΡΠΉ ΠΊΠ»ΡΡ ΠΌΠΎΠΆΠ½ΠΎ Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½ΠΎ ΠΊΠ»Π°ΡΡΡ RSAPKCS1KeyExchangeFormatter.
2) Π Π°ΡΡΠΈΡΡΠΎΠ²Π°ΡΡ ΠΏΠΎΠ»ΡΡΠ΅Π½Π½ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅.
ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π²ΡΠ·Π²Π°ΡΡ ΠΌΠ΅ΡΠΎΠ΄ DecryptKeyExchange, ΠΏΠ΅ΡΠ΅Π΄Π°Π² Π·Π°ΡΠΈΡΡΠΎΠ²Π°Π½Π½ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°.
2.1 ΠΠ»Π°ΡΡΡ Π΄Π»Ρ ΡΠΎΡΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΈ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ ΡΠΈΡΡΠΎΠ²ΠΎΠΉ ΠΏΠΎΠ΄ΠΏΠΈΡΠΈ
Π Microsoft .NET Framework 2.0 ΡΡΡΠ΅ΡΡΠ²ΡΡΡ ΡΠΏΠ΅ΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ ΠΊΠ»Π°ΡΡΡ, ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΡΡΠΈΠ΅ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ΅ ΡΠΎΡΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠΎΠ΄ΠΏΠΈΡΠ°Π½Π½ΠΎΠ³ΠΎ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°. ΠΠ»Ρ ΡΠΎΡΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΏΠΎΠ΄ΠΏΠΈΡΠΈ ΡΠ»ΡΠΆΠ°Ρ ΠΊΠ»Π°ΡΡΡ, Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½Π½ΡΠ΅ ΠΎΡ ΠΊΠ»Π°ΡΡΠ° Asymmetric SignatureFormatter. ΠΠ»Ρ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ ΡΠΈΡΡΠΎΠ²ΠΎΠΉ ΠΏΠΎΠ΄ΠΏΠΈΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ ΠΊΠ»Π°ΡΡΡ, Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½Π½ΡΠ΅ ΠΎΡ ΠΊΠ»Π°ΡΡΠ° AsymmetricSignatureDeformatter.
Π Π²Π΅ΡΡΠΈΠΈ Microsoft .NET Framework 2.0 ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ Π΄Π²Π° ΠΊΠ»Π°ΡΡΠ° Π΄Π»Ρ ΡΠΎΡΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΡΠΈΡΡΠΎΠ²ΠΎΠΉ ΠΏΠΎΠ΄ΠΏΠΈΡΠΈ:
β’ DSASignatureFormatter,
β’ RSAPKCS1SignatureFormatter;
ΠΈ Π΄Π²Π° ΠΊΠ»Π°ΡΡΠ° Π΄Π»Ρ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ ΡΠΈΡΡΠΎΠ²ΠΎΠΉ ΠΏΠΎΠ΄ΠΏΠΈΡΠΈ:
β’ DSASignatureDeformatter,
β’ RSAPKCS1SignatureDeformatter.
ΠΠΎΠ΄ΠΏΠΈΡΡ ΡΠΎΡΠΌΠΈΡΡΠ΅ΡΡΡ Π² ΡΠΎΡΠΌΠ°ΡΠ΅ PKCS#1 Π²Π΅ΡΡΠΈΠΈ 1.5.
ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡ ΠΌΠΎΠΆΠ΅Ρ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΡΠ²ΠΎΠΈ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠ΅ ΠΊΠ»Π°ΡΡΡ Π΄Π»Ρ ΡΠΎΡΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΈ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ ΡΠΈΡΡΠΎΠ²ΠΎΠΉ ΠΏΠΎΠ΄ΠΏΠΈΡΠΈ Π΄Π»Ρ Π»ΡΠ±ΠΎΠ³ΠΎ ΠΊΡΠΈΠΏΡΠΎΠ³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ Π°Π»Π³ΠΎΡΠΈΡΠΌΠ°. ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΡ ΠΊΠ»Π°ΡΡ ΡΠΎΡΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΡΠΈΡΡΠΎΠ²ΠΎΠΉ ΠΏΠΎΠ΄ΠΏΠΈΡΠΈ ΠΎΡ ΠΊΠ»Π°ΡΡΠ° AsymmetricSignatureFormatter, Π° ΠΊΠ»Π°ΡΡ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ ΡΠΈΡΡΠΎΠ²ΠΎΠΉ ΠΏΠΎΠ΄ΠΏΠΈΡΠΈ ΠΎΡ ΠΊΠ»Π°ΡΡΠ° AsymmetricSignatureDeformatter ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎ.
ΠΠ»Ρ ΡΠΎΡΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΡΠΈΡΡΠΎΠ²ΠΎΠΉ ΠΏΠΎΠ΄ΠΏΠΈΡΠΈ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΊΠ»Π°ΡΡΠ° RSAPKCS1 SignatureFormatter Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ:
1)Π‘ΠΎΠ·Π΄Π°ΡΡ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ ΠΊΠ»Π°ΡΡΠ° RSAPKCS1SignatureFormatter.
ΠΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ ΡΠ΅ΠΊΡΠ΅ΡΠ½ΡΠΉ ΠΊΠ»ΡΡ Π΄Π»Ρ ΡΠΎΡΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΏΠΎΠ΄ΠΏΠΈΡΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅ΡΠ΅Π΄Π°Π² Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠ° ΠΎΠ±ΡΠ΅ΠΊΡ, ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΡΡΠΈΠΉ Π°Π»Π³ΠΎΡΠΈΡΠΌ RSA, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΡΠ΅ΠΊΡΠ΅ΡΠ½ΡΠΉ ΠΊΠ»ΡΡ, ΠΈΠ»ΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°Π² ΠΎΠ±ΡΠ΅ΠΊΡ Π² ΠΌΠ΅ΡΠΎΠ΄ SetKey.
2) ΠΠ°Π΄Π°ΡΡ Π°Π»Π³ΠΎΡΠΈΡΠΌ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Ρ Π΅ΡΠ°.
ΠΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°ΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΌΠ΅ΡΠΎΠ΄Π° SetHashAlgorithm. Π ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° ΠΎΠ½ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ Π°Π»Π³ΠΎΡΠΈΡΠΌΠ°. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ: «SHA1».
3)Π‘ΡΠΎΡΠΌΠΈΡΠΎΠ²Π°ΡΡ ΠΏΠΎΠ΄ΠΏΠΈΡΡ.
ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΠΌΠ΅ΡΠΎΠ΄ CreateSignature. Π ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° ΠΏΠ΅ΡΠ΅Π΄Π°Π΅ΡΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Ρ Π΅ΡΠ° ΠΏΠΎΠ΄ΠΏΠΈΡΡΠ²Π°Π΅ΠΌΡΡ Π΄Π°Π½Π½ΡΡ .
ΠΠ»Ρ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ ΠΏΠΎΠ΄ΠΏΠΈΡΠΈ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ:
1)Π‘ΠΎΠ·Π΄Π°ΡΡ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ ΠΊΠ»Π°ΡΡΠ° RSAPKCS1SignatureDeformatter.
ΠΠ°Π΄Π°ΡΡ ΠΎΡΠΊΡΡΡΡΠΉ ΠΊΠ»ΡΡ Π΄Π»Ρ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ ΠΏΠΎΠ΄ΠΏΠΈΡΠΈ ΠΌΠΎΠΆΠ½ΠΎ Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½ΠΎ Π·Π°Π΄Π°Π½ΠΈΡ ΠΊΠ»ΡΡΠ° Π΄Π»Ρ ΠΊΠ»Π°ΡΡΠ° RSAPKCS1SignatureFormatter.
2) ΠΠ°Π΄Π°ΡΡ Π°Π»Π³ΠΎΡΠΈΡΠΌ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Ρ Π΅ΡΠ°.
3) ΠΡΠΎΠ²Π΅ΡΠΈΡΡ ΠΏΠΎΠ΄ΠΏΠΈΡΡ.
ΠΠ»Ρ ΡΡΠΎΠΉ ΡΠ΅Π»ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΠΌΠ΅ΡΠΎΠ΄ VerifySignature. Π ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² Π·Π°Π΄Π°Π΅ΡΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Ρ Π΅ΡΠ° Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ° ΠΈ ΠΏΠΎΠ΄ΠΏΠΈΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Ρ Π΅ΡΠ°.
3. ΠΡΠΈΠΌΠ΅ΡΡ
Π‘ΠΈΠΌΠΌΠ΅ΡΡΠΈΡΠ½ΠΎΠ΅ ΡΠΈΡΡΠΎΠ²Π°Π½ΠΈΠ΅.
Π ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΠΊΠΎΠ΄Π° Π΄Π»Ρ Π·Π°ΡΠΈΡΡΠΎΠ²Π°Π½ΠΈΡ ΡΠ°ΠΉΠ»Π°, Π·Π°Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΡΡΡΠΎΠΊΠΎΠΉ inName, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΠΊΠ»Π°ΡΡ RijndaelManaged Ρ Π·Π°Π΄Π°Π½Π½ΡΠΌ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎΠΌ Key ΠΈ Π²Π΅ΠΊΡΠΎΡΠΎΠΌ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ (IV), Π° ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ Π·Π°ΡΠΈΡΡΠΎΠ²Π°Π½ΠΈΡ Π²ΡΠ²ΠΎΠ΄ΠΈΡΡΡ Π² ΡΠ°ΠΉΠ», Π·Π°Π΄Π°Π½Π½ΡΠΉ ΡΡΡΠΎΠΊΠΎΠΉ outName. ΠΠ°ΡΠ°ΠΌΠ΅ΡΡΡ desKey ΠΈ desIV, ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°Π΅ΠΌΡΠ΅ Π² Π΄Π°Π½Π½ΡΠΉ ΠΌΠ΅ΡΠΎΠ΄, ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΡΡ ΡΠΎΠ±ΠΎΠΉ 8-Π±Π°ΠΉΡΠΎΠ²ΡΠ΅ ΠΌΠ°ΡΡΠΈΠ²Ρ. ΠΠ»Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΡΡΠΎΠ³ΠΎ ΠΏΡΠΈΠΌΠ΅ΡΠ° Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π½Π°Π»ΠΈΡΠΈΠ΅ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Π½ΠΎΠ³ΠΎ ΠΏΠ°ΠΊΠ΅ΡΠ° ΡΡΠΎΠΉΠΊΠΎΠ³ΠΎ ΡΠΈΡΡΠΎΠ²Π°Π½ΠΈΡ.
Π―Π·ΡΠΊ Visual C++
void EncryptData (String^ inName, String^ outName, array^rijnKey, array^rijnIV)
{
//Create the file streams to handle the input and output files.
FileStream^ fin = gcnew FileStream (inName, FileMode: Open, FileAccess: Read);
FileStream^ fout = gcnew FileStream (outName, FileMode: OpenOrCreate, FileAccess: Write);
fout->SetLength (0);
//Create variables to help with read and write.
array^bin = gcnew array (100);
long rdlen = 0; //This is the total number of bytes written.
long totlen = (long)fin->Length; //This is the total length of the input file.
int len; //This is the number of bytes to be written at a time.
SymmetricAlgorithm^ rijn = SymmetricAlgorithm: Create (); //Creates the default implementation, which is RijndaelManaged.
CryptoStream^ encStream = gcnew CryptoStream (fout, rijn->CreateEncryptor (rijnKey, rijnIV), CryptoStreamMode: Write);
Console:WriteLine («Encrypting…»);
//Read from the input file, then encrypt and write to the output file.
while (rdlen < totlen)
{
len = fin->Read (bin, 0, 100);
encStream->Write (bin, 0, len);
rdlen = rdlen + len;
Console:WriteLine («{0} bytes processed», rdlen);
}
encStream->Close ();
fout->Close ();
fin->Close ();
}
ΠΡΠΈΠΌΠΌΠ΅ΡΡΠΈΡΠ½ΠΎΠ΅ ΡΠΈΡΡΠΎΠ²Π°Π½ΠΈΠ΅ Π ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΠΊΠΎΠ΄Π° ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ, ΠΊΠ°ΠΊ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΠΉ Π°Π»Π³ΠΎΡΠΈΡΠΌ Π°ΡΠΈΠΌΠΌΠ΅ΡΡΠΈΡΠ½ΠΎΠ³ΠΎ ΡΠΈΡΡΠΎΠ²Π°Π½ΠΈΡ, Π½Π°ΡΠ»Π΅Π΄ΡΠ΅ΠΌΡΠΉ ΠΎΡ ΠΊΠ»Π°ΡΡΠ° AsymmetricAlgorithm. ΠΠ»Ρ Π΄Π΅ΠΌΠΎΠ½ΡΡΡΠ°ΡΠΈΠΈ ΠΏΠΎΡΡΠ΄ΠΊΠ° ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ° ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠΉ ΠΊΠ»Π°ΡΡ.
Π―Π·ΡΠΊ Visual C++
#using
#using
using namespace System;
using namespace System: Xml;
using namespace System: Text;
using namespace System: Security:Cryptography;
using namespace System: Reflection;
[assembly: AssemblyKeyFile («CustomCrypto.snk»)];
[assembly: AssemblyVersion («1.0.0.0»)];
[assembly: CLSCompliant (true)];
namespace Contoso
{
// Define a CustomCrypto class that inherits from the AsymmetricAlgorithm
// class.
public ref class CustomCrypto :
public System: Security:Cryptography:AsymmetricAlgorithm
{
// Declare local member variables.
private:
CspParameters^ cryptoServiceParameters;
array^ customValidKeySizes;
// Initialize a CustomCrypto with the default key size of 8.
public:
CustomCrypto ()
{
customValidKeySizes =
gcnew array{gcnew KeySizes (8, 64, 8)};
this->KeySize = 8;
}
// Initialize a CustomCrypto with the specified key size.
public:
CustomCrypto (int keySize)
{
customValidKeySizes =
gcnew array{gcnew KeySizes (8, 64, 8)};
this->KeySize = keySize;
}
// Accessor function for keySizes member variable.
public:
property array^ LegalKeySizes
{
virtual array^ get () override
{
return (array^)customValidKeySizes->Clone ();
}
}
// Modify the KeySizeValue property inherited from the Asymmetric
// class. Prior to setting the value, ensure it falls within the
// range identified in the local keySizes member variable.
public:
property int KeySize
{
virtual int get () override
{
return KeySizeValue;
}
virtual void set (int value) override
{
for (int i = 0; i < customValidKeySizes->Length; i++)
{
if (customValidKeySizes[i]->SkipSize == 0)
{
if (customValidKeySizes[i]->MinSize == value)
{
KeySizeValue = value;
return;
}
}
else
{
for (int j = customValidKeySizes[i]->MinSize;
j <= customValidKeySizes[i]->MaxSize;
j += customValidKeySizes[i]->SkipSize)
{
if (j == value)
{
KeySizeValue = value;
return;
}
}
}
}
// If the key does not fall within the range identified
// in the keySizes member variable, throw an exception.
throw gcnew CryptographicException («Invalid key size.»);
}
}
// Initialize the parameters with default values.
public:
void InitializeParameters ()
{
cryptoServiceParameters = gcnew CspParameters ();
cryptoServiceParameters->ProviderName = «Contoso» ;
cryptoServiceParameters->KeyContainerName = «SecurityBin1» ;
cryptoServiceParameters->KeyNumber = 1;
cryptoServiceParameters->ProviderType = 2;
}
// Parse specified xmlString for values to populate the CspParams
// Expected XML schema:
public:
virtual void FromXmlString (String^ xmlString) override
{
if (xmlString ≠ nullptr)
{
XmlDocument^ document = gcnew XmlDocument ();
document->LoadXml (xmlString);
XmlNode^ firstNode = document->FirstChild;
XmlNodeList^ nodeList;
// Assemble parameters from values in each XML element.
cryptoServiceParameters = gcnew CspParameters ();
// KeyContainerName is optional.
nodeList =
document->GetElementsByTagName («KeyContainerName»);
if (nodeList->Count > 0)
{
cryptoServiceParameters->KeyContainerName =
nodeList->Item (0)->InnerText;
}
// KeyNumber is optional.
nodeList = document->GetElementsByTagName («KeyNumber»);
if (nodeList->Count > 0)
{
cryptoServiceParameters->KeyNumber =
Int32:Parse (nodeList->Item (0)->InnerText);
}
// ProviderName is optional.
nodeList = document->GetElementsByTagName («ProviderName»);
if (nodeList->Count > 0)
{
cryptoServiceParameters->ProviderName =
nodeList->Item (0)->InnerText;
}
// ProviderType is optional.
nodeList = document->GetElementsByTagName («ProviderType»);
if (nodeList->Count > 0)
{
cryptoServiceParameters->ProviderType =
Int32:Parse (nodeList->Item (0)->InnerText);
}
}
else
{
throw gcnew ArgumentNullException («xmlString»);
}
}
// Create an XML string representation of the parameters in the
// current customCrypto object.
public:
virtual String^ ToXmlString (bool includePrivateParameters) override
{
String^ keyContainerName = «» ;
String^ keyNumber = «» ;
String^ providerName = «» ;
String^ providerType = «» ;
if (cryptoServiceParameters ≠ nullptr)
{
keyContainerName =
cryptoServiceParameters->KeyContainerName;
keyNumber = cryptoServiceParameters->KeyNumber.ToString ();
providerName = cryptoServiceParameters->ProviderName;
providerType =
cryptoServiceParameters->ProviderType.ToString ();
}
StringBuilder^ sb = gcnew StringBuilder ();
sb->Append (««);
sb->Append (««);
sb->Append (keyContainerName);
sb->Append (««);
sb->Append (««);
sb->Append (keyNumber);
sb->Append (««);
sb->Append (««);
sb->Append (providerName);
sb->Append (««);
sb->Append (««);
sb->Append (providerType);
sb->Append (««);
sb->Append (««);
return (sb->ToString ());
}
// Return the name for the key exchange algorithm.
public:
property String^ KeyExchangeAlgorithm
{
virtual String^ get () override
{
return «RSA-PKCS1-KeyEx» ;
}
}
// Retrieves the name of the signature alogrithm.
public:
property String^ SignatureAlgorithm
{
virtual String^ get () override
{
return «http://www.w3.org/2000/09/xmldsig#rsa-sha1» ;
}
}
// Required member for implementing the AsymmetricAlgorithm class.
protected:
virtual ~CustomCrypto ()
{
}
// Call the Create method using the CustomCrypto assembly name.
// The create function attempts to create a CustomCrypto
// object using the assembly name. This functionality requires
// modification of the machine. config file. Add the following
// section to the configuration element and modify the values
// of the cryptoClass to reflect what isinstalled
// in your machines GAC.
// class="CustomCrypto" />
public:
static CustomCrypto^ Create ()
{
return Create («CustomCrypto»);
}
// Create a CustomCrypto object by calling CrytoConfig’s
// CreateFromName method and casting the type to CustomCrypto.
// The create function attempts to create a CustomCrypto object
// using the assembly name. This functionality requires
// modification of the machine. config file. Add the following
// section to the configuration element and modify the values
// of the cryptoClass to reflect what is installed
// in your machines GAC.
// class="CustomCrypto" />
public:
static CustomCrypto^ Create (String^ algorithmName)
{
return (CustomCrypto^)
CryptoConfig:CreateFromName (algorithmName);
}
};
}
Π₯ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅
Π ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΠΊΠΎΠ΄Π° ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ, ΠΊΠ°ΠΊ Π²ΡΡΠΈΡΠ»ΠΈΡΡ Ρ ΡΡ SHA1CryptoServiceProvider Π΄Π»Ρ ΠΌΠ°ΡΡΠΈΠ²Π°. Π ΡΡΠΎΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΠΏΡΠ΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅ΡΡΡ ΡΡΡΠ΅ΡΡΠ²ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΡΠ΅Π΄Π²Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ ΠΌΠ°ΡΡΠΈΠ²Π° Π±Π°ΠΉΡΠΎΠ² dataArray[]. SHA1CryptoServiceProvider ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΡΠΌ ΠΊΠ»Π°ΡΡΠΎΠΌ HashAlgorithm.
Π―Π·ΡΠΊ Visual C++
HashAlgorithm^ sha = gcnew SHA1CryptoServiceProvider;
array^ result = sha->ComputeHash (dataArray);
ΠΠ°ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅
ΠΊΠ»Π°ΡΡ ΠΊΡΠΈΠΏΡΠΎΠ³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΉ framework ΡΠΈΡΡΠΎΠ²Π°Π½ΠΈΠ΅ Π Π΄Π°Π½Π½ΠΎΠΉ ΡΠ°Π±ΠΎΡΠ΅ Π±ΡΠ»ΠΈ ΡΠ°ΡΡΠΌΠΎΡΡΠ΅Π½Ρ ΠΊΡΠΈΠΏΡΠΎΠ³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΡΡΠ΅Π΄ΡΡΠ²Π° Microsoft .NET. ΠΡΠΎΠ²Π΅Π΄Π΅Π½ ΠΎΠ±Π·ΠΎΡ ΠΎΡΠ½ΠΎΠ²Π½ΡΡ ΠΊΡΠΈΠΏΡΠΎΠ³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΡ ΠΊΠ»Π°ΡΡΠΎΠ² Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ Framework Class Libr, ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΠ΅Π½ System.Security.CryptographΡ, ΠΈΠ·ΡΡΠ΅Π½Π° ΠΈΠ΅ΡΠ°ΡΡ ΠΈΡ ΠΊΠ»Π°ΡΡΠΎΠ², ΡΠ΅Π°Π»ΠΈΠ·ΡΡΡΠΈΡ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠ΅ ΠΊΡΠΈΠΏΡΠΎΠ³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ Π°Π»Π³ΠΎΡΠΈΡΠΌΡ. ΠΡΠ½ΠΎΠ²Π½ΠΎΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π±ΡΠ»ΠΎ Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ΠΎ Π½Π° ΡΡΠΈ ΠΎΡΠ½ΠΎΠ²Π½ΡΡ ΡΠ°Π·Π½ΠΎΠ²ΠΈΠ΄Π½ΠΎΡΡΠΈ ΠΊΡΠΈΠΏΡΠΎΠ³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΡ ΠΊΠ»Π°ΡΡΠΎΠ²:
— Π‘ΠΈΠΌΠΌΠ΅ΡΡΠΈΡΠ½ΡΠ΅ Π°Π»Π³ΠΎΡΠΈΡΠΌΡ ΡΠΈΡΡΠΎΠ²Π°Π½ΠΈΡ
— ΠΡΠΈΠΌΠΌΠ΅ΡΡΠΈΡΠ½ΡΠ΅ Π°Π»Π³ΠΎΡΠΈΡΠΌΡ ΡΠΈΡΡΠΎΠ²Π°Π½ΠΈΡ
— ΠΠ»Π³ΠΎΡΠΈΡΠΌΡ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Ρ Π΅ΡΠ° Π΄Π°Π½Π½ΡΡ ΠΡΠΎΠ²Π΅Π΄Π΅Π½ ΠΎΠ±Π·ΠΎΡ ΠΎΡΠ½ΠΎΠ²Π½ΡΡ Π°Π»Π³ΠΎΡΠΈΡΠΌΠΎΠ² ΡΠΈΡΡΠΎΠ²Π°Π½ΠΈΡ, ΠΈΡ ΡΠ²ΠΎΠΉΡΡΠ²Π° ΠΈ ΠΌΠ΅ΡΠΎΠ΄Ρ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΠΈΠ΅ΡΡ Π² ΡΡΠ΅Π΄Π΅ .NET Framework. Π’Π°ΠΊ ΠΆΠ΅ ΠΈΠ·ΡΡΠ΅Π½Ρ ΡΠ°ΠΊΠΈΠ΅ Π°ΡΠΏΠ΅ΠΊΡΡ, ΠΊΠ°ΠΊ ΡΠΈΡΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ ΡΠ°ΡΡΠΈΡΡΠΎΠ²Π°Π½ΠΈΠ΅ Π΄Π°Π½Π½ΡΡ , ΡΠΎΡΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° ΡΠΈΡΡΠΎΠ²ΠΎΠΉ ΠΏΠΎΠ΄ΠΏΠΈΡΠΈ. ΠΠ°Π»Π΅Π΅ Π±ΡΠ»ΠΈ ΡΠ°ΡΡΠΌΠΎΡΡΠ΅Π½Ρ ΠΏΡΠΈΠΌΠ΅ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΠΈΠ·ΡΡΠ°Π΅ΠΌΡΡ ΡΡΠ΅Π΄ΡΡΠ² Π½Π° ΡΠ·ΡΠΊΠ΅ Visual C++ Π΄Π»Ρ ΡΡΠ΅Ρ ΠΎΡΠ½ΠΎΠ²Π½ΡΡ ΡΠ°Π·Π½ΠΎΠ²ΠΈΠ΄Π½ΠΎΡΡΠ΅ΠΉ ΠΊΡΠΈΠΏΡΠΎΠ³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΡ ΠΊΠ»Π°ΡΡΠΎΠ².
Π ΠΈΡΠΎΠ³Π΅ ΡΡΠΎΠΈΡ ΠΎΡΠΌΠ΅ΡΠΈΡΡ Π±ΠΎΠ»ΡΡΠΈΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ ΠΈΠ·ΡΡΠ°Π΅ΠΌΠΎΠΉ ΡΡΠ΅Π΄Ρ ΠΊΠ°ΠΊ Π΄Π»Ρ Π·Π°ΡΠΈΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ, ΡΠ°ΠΊ ΠΈ Π΄Π»Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ. Π£ΡΡΡΠΎΠΉΡΡΠ²ΠΎ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ Π΄Π°Π΅Ρ ΡΠΈΡΠΎΡΠ°ΠΉΡΠΈΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ ΠΏΠΎ ΡΠ°Π±ΠΎΡΠ΅ Ρ ΠΊΡΠΈΠΏΡΠΎΠ³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΌΠΈ Π°Π»Π³ΠΎΡΠΈΡΠΌΠ°ΠΌΠΈ, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΡΡ ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΠΎΡΡΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΎΠ² ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΉ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈ ΡΠΎΠ³ΠΎ ΠΆΠ΅ ΠΊΡΠΈΠΏΡΠΎΠ³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ Π°Π»Π³ΠΎΡΠΈΡΠΌΠ°.
1. ΠΠ°Π½Π½ΡΠ΅ ΠΏΠΎΡΡΠ°Π»Π° http://msdn.microsoft.com
2. ΠΠ°Π½Π½ΡΠ΅ ΠΏΠΎΡΡΠ°Π»Π° http://www.interface.ru
3. ΠΠΆΠ΅Ρ ΠΡΠΎΡΠΈΠ·. ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π΄Π»Ρ Microsoft .NET. ΠΠΎΡΠΊΠ²Π°. Microsoft Press (Π ΡΡΡΠΊΠ°Ρ ΡΠ΅Π΄Π°ΠΊΡΠΈΡ). 2003. 697 ΡΡΡ.
4. ΠΡΡΡ Π»Π΅ΠΊΡΠΈΠΉ Π£ΡΠ΅Π±Π½ΠΎΠ³ΠΎ Π¦Π΅Π½ΡΡΠ° Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΠΈ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΎΠ½Π½ΡΡ ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΠΉ Microsoft ΠΠΎΡΠΊΠΎΠ²ΡΠΊΠΎΠ³ΠΎ ΠΈΠ½ΠΆΠ΅Π½Π΅ΡΠ½ΠΎ-ΡΠΈΠ·ΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΠΈΠ½ΡΡΠΈΡΡΡΠ° (Π³ΠΎΡΡΠ΄Π°ΡΡΡΠ²Π΅Π½Π½ΠΎΠ³ΠΎ ΡΠ½ΠΈΠ²Π΅ΡΡΠΈΡΠ΅ΡΠ°)