Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Collections.Generic;
- using System.IO;
- using System.Linq;
- using System.Security.Cryptography;
- using System.Text;
- using System.Threading.Tasks;
- namespace console_crypto_3
- {
- class Program
- {
- private static string SignMessage(string message, string privateKey)
- {
- string signedMessage;
- try
- {
- RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(1024);
- rsa.FromXmlString(privateKey);
- // задаём параметры шифрования: Алгоритм хеширования SHA1
- signedMessage = Convert.ToBase64String(rsa.SignData(Encoding.UTF8.GetBytes(message), CryptoConfig.MapNameToOID("SHA1")));
- }
- catch (Exception)
- {
- signedMessage = string.Empty;
- }
- return signedMessage;
- }
- private static bool VerifyMessage(string originalMessage, string signedMessage, string publicKey)
- {
- bool verified;
- try
- {
- RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(1024);
- rsa.FromXmlString(publicKey); // загрузка публичного ключа
- verified = rsa.VerifyData(Encoding.UTF8.GetBytes(originalMessage), CryptoConfig.MapNameToOID("SHA1"), Convert.FromBase64String(signedMessage));
- }
- catch (Exception)
- {
- verified = false;
- }
- return verified;
- }
- static void Main(string[] args)
- {
- //SHA1 SHA512 MD5
- Console.WriteLine("Generating RSA with 1024-bit length");
- string fileName = "public.xml";
- RSACryptoServiceProvider RSA = new RSACryptoServiceProvider(1024);
- Console.WriteLine("Export public key...");
- string publicKey = RSA.ToXmlString(false);
- File.WriteAllText(fileName, publicKey);
- Console.WriteLine("File has been saved in: {0}", Path.GetFullPath(fileName).ToString());
- Console.WriteLine("Export private key...");
- fileName = "private.xml";
- string privateKey = RSA.ToXmlString(true);
- File.WriteAllText(fileName, privateKey);
- Console.WriteLine("Файл сохранён: {0}", Path.GetFullPath(fileName));
- Console.WriteLine("Скопируйте файлы ключей в другой каталог");
- Console.WriteLine("При следующем запуске программы будет перезапись файла");
- Console.WriteLine("1. Подпись\n2.Проверка");
- Console.Write("Enter: ");
- int choice = int.Parse(Console.ReadLine());
- if (choice == 1)
- {
- Console.Write("Путь до приватного ключа: ");
- string path = Console.ReadLine();
- string privKey = string.Empty;
- using (StreamReader sr = new StreamReader(path))
- privKey = sr.ReadToEnd();
- Console.Write("Путь до файла, который мы хотим подписать: ");
- path = Console.ReadLine();
- string context = string.Empty;
- using (StreamReader sr = new StreamReader(path))
- context = sr.ReadToEnd();
- string signed = SignMessage(context, privKey);
- File.WriteAllText("signed.txt",signed);
- Console.WriteLine("Подписанный документ сохранён: {0}", Path.GetFullPath("signed.txt"));
- }
- else
- {
- Console.Write("Путь до публичного ключа: ");
- string path = Console.ReadLine();
- string publKey = string.Empty;
- using (StreamReader sr = new StreamReader(path))
- publKey = sr.ReadToEnd();
- Console.Write("Путь до неподписанного файла: ");
- path = Console.ReadLine();
- string notSigned = string.Empty;
- using (StreamReader sr = new StreamReader(path))
- notSigned = sr.ReadToEnd();
- Console.Write("Путь до подписанного файла: ");
- path = Console.ReadLine();
- string signed = string.Empty;
- using (StreamReader sr = new StreamReader(path))
- signed = sr.ReadToEnd();
- bool verify = VerifyMessage(notSigned, signed, publKey);
- Console.WriteLine(verify);
- }
- Console.ReadKey();
- }
- }
- }
Add Comment
Please, Sign In to add comment