📄 program.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 + -