ΠŸΠΎΠΌΠΎΡ‰ΡŒ Π² написании студСнчСских Ρ€Π°Π±ΠΎΡ‚
АнтистрСссовый сСрвис

ΠšΡ€ΠΈΠΏΡ‚ΠΎΠ³Ρ€Π°Ρ„ΠΈΡ‡Π΅ΡΠΊΠΈΠ΅ срСдства 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 Московского ΠΈΠ½ΠΆΠ΅Π½Π΅Ρ€Π½ΠΎ-физичСского института (государствСнного унивСрситСта)

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