⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 program.cs

📁 realization of DSA algorithm
💻 CS
字号:
using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
using System.Security.Cryptography;

namespace Lab8
    //DSAApp
{
class Program
{
static void Main(string[] args)
{
// Экземпляр DSACryptoServiceProvider будет использоваться для
// начальной генерации и как контейнер ключей подписи и проверки
DSACryptoServiceProvider key = new DSACryptoServiceProvider();

// Массив с данными для подписи
byte[] dataToSign = 
{ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 
16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31 };

Console.WriteLine("Подписывается массив:");
Console.WriteLine(ByteArrayToString(dataToSign));

// Вызов функции Sign() для получения подписи
// dataToSign - массив байт, для которого вычисляется подпись
// key.ExportParameters(true) - извлекает структуру DSAParameters c
// включением информации секретного ключа подписи
byte[] signature = Sign(dataToSign, key.ExportParameters(true));

Console.WriteLine("Подпись:");
Console.WriteLine(ByteArrayToString(signature));

Console.Write("Проверка подписи ... ");

// Вызов функции VerifySignature для проверки подписи
// dataToSign - массив байт, для которого проверяется подпись
// signature - массив байт, содержащий подпись
// key.ExportParameters(false) - извлекает структуру DSAParameters с
// включением ТОЛЬКО информации открытого ключа проверки подписи
bool acceptSignature = VerifySignature(dataToSign, signature, key.ExportParameters(false));
if (acceptSignature)
{
Console.WriteLine("УСПЕШНО!");
}
else
{
Console.WriteLine("ОШИБКА.");
}

Console.ReadLine();
}

//
// Функция вычисляет цифровую подпись DSA для массива байт data c ключом privateKey
//
static byte[] Sign(byte[] data, DSAParameters privateKey)
{
// Экземпляр провайдера DSA
DSACryptoServiceProvider dsa = new DSACryptoServiceProvider();

// Импорт ключа для вычисления подписи
dsa.ImportParameters(privateKey);

// Вычисление и возврат массива байт подписи
return dsa.SignData(data);
}

//
// Функция проверяет цифровую подпись signature для data с ключом publicKey
//
static bool VerifySignature(byte[] data, byte[] signature, DSAParameters publicKey)
{
// Экземпляр провайдера DSA
DSACryptoServiceProvider dsa = new DSACryptoServiceProvider();

// Импорт ключа для проверки подписи
dsa.ImportParameters(publicKey);

// Возврат статуса проверки подписи
return dsa.VerifyData(data, signature);
}

//
// Функция преобразует байтовый массив в шестнадцатеричную строку
//
static string ByteArrayToString(byte[] arrInput)
{
int i;
StringBuilder sOutput = new StringBuilder(arrInput.Length);
for (i = 0; i < arrInput.Length - 1; i++)
{
sOutput.Append(arrInput[i].ToString("X2"));
}
return sOutput.ToString();
}

}
} 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -