дин з додатків буде працювати в якості веб-Срвіс (сервер), а інше в якості клієнта даного веб - сервісу.
Так само в даному прикладі відсутня необхідність запуску другого додатка або отримання доступу його функціоналу в рамках роботи іншої програми. Для вирішення цих завдань найкраще було б скористатися технологією OLE/ActiveX, яка робить можливим зв'язування і впровадження об'єктів в інші документи та об'єкти.
Питання безпеки
Т.к. завдання полягає в розробці не просто двох додатків, взаємодіючих між собою, а в розробці способу контролю легальності даної взаємодії, було вирішено скористатися можливостями криптографічних функцій фреймворку .NET.
Для забезпечення цілісності даних ми будемо використовувати криптографічні цифрові підписи використовують алгоритми з відкритим ключем. При підписуванні даних за допомогою цифрового підпису, інша сторона може перевірити підпис і переконатися в тому, що дані надійшли з відповідного джерела і не були змінені після підписування. Цифрові підписи зазвичай застосовуються до хеш-кодами, які є відображеннями деяких масивів даних більшого розміру.
Використання цифрових підписів у нашому прикладі вирішує відразу дві проблеми безпеки. По-перше застосування хешування до вихідного XML файлу гарантує цілісність даних і запобігає можливість їх зміни третьою стороною. Хеш функції являють собою певну послідовність символів, сформовану хеш-алгоритмом на основі вихідних даних. У результаті зміни навіть одного символу у вихідних даних призводить до отримання зовсім відмінної хеш-функції. Дана особливість дозволяє бути впевненим у тому, що дані відповідають хеш-функції.
Друга проблема - неможливість бути впевненим, що дані отримані від нашого першого застосування. Зловмисник може зробити підміну даних та хеш-функції на свої, тоді порівняння хеш-функцій не виявить порушення цілісності. Перший додаток шифрує хеш-функцію ассімітрічность алгоритмом застосовуючи свій закритий ключ. Другий додаток дешифрує отримані дані використовуючи відкритий ключ першого застосування і порівнює отриману хеш-функцію з обчисленої на основі отриманих даних. У разі їх збігу з'являється повідомлення про пройдену перевірці. Застосування цифрових підписів дозволяє однозначно ідентифікувати автора.
Додаток
Приклад XML файлу
lt;? xml version= 1.0 ? gt;
lt; numbers gt;
lt; firstEl gt; 123 lt;/firstEl gt;
lt; secondEl gt; 33 lt;/secondEl gt;
lt; Signature xmlns= # justify" gt; lt; SignedInfo gt;
lt; CanonicalizationMethod Algorithm= # justify gt; lt; SignatureMethod Algorithm= # justify gt; lt; Reference URI= gt;
lt; Transforms gt;
lt; Transform Algorithm= # justify" gt; lt;/Transforms gt;
lt; DigestMethod Algorithm=laquo;#raquo;justify"gt;lt;DigestValuegt;fRa5HLoE4P8k2Bqq9/aVheND5RY=lt;/DigestValuegt;
lt;/Reference gt;
lt;/SignedInfo gt;
lt;SignatureValuegt;pV16GUJMtAYQq/qkx4EBWqhb2jyuLx1ni6z20Lp0jA16VZoU1Ltemi6MviNLm4UMbi7boSGG7bN27+vrFZJUv5o+zJBE7sC/fiZkNgQ3xQOC4cxLyrRWeuqobbWDuuut1ayG13m1hzpzWd4uxAKpnmPmMkgM3z2+BNvTUtc0RM4=lt;/SignatureValuegt;
lt;/Signature gt;
lt;/numbers gt;
Вихідний код першої програми
namespace WindowsFormsApplication5
{partial class Form1: Form
{XmlDocument doc=new XmlDocument (); Form1 ()
{();
} void button1_Click (object sender, EventArgs e)
{(saveFileDialog.ShowDialog () == DialogResult.OK)
{firstNumber=Convert.ToInt32 (textBox1.Text); secondNumber=Convert.ToInt32 (textBox2.Text); newDec=doc.CreateXmlDeclaration ( 1.0 raquo ;, null, null) ;. AppendChild (newDec); newRoot=doc.CreateElement ( numbers ); firstEl=doc.CreateElement ( firstEl ) ;. InnerText=firstNumber.ToString () ;. AppendChild (firstEl); secondEl=doc.CreateElement ( laquo ; secondEl ) ;. InnerText=secondNumber.ToString () ;. AppendChild (secondEl);
doc.AppendChild (newRoot);
//Створення контейнера ключів
CspParameters cspParams=new CspParameters () ;. KeyContainerName= XML_DSIG_RSA_KEY raquo ;;
//Створення та збереження в контейнері ключа
RSACryptoServiceProvider rsaKey=new RSACryptoServiceProvider (cspParams); (doc, rsaKey); tr=new XmlTextWriter ...