Загрузка...

Шифрование строк методом RSA

Тема в разделе C# создана пользователем r3xq1 13 мар 2021. 434 просмотра

  1. r3xq1
    r3xq1 Автор темы 13 мар 2021 https://t.me/DarkSoft_Extra 119 27 июл 2018
    Простенький способ зашифровать строки методом RSA (1024/2048)
    Создаём класс RSATool.cs и запишем в него код:
    Код
    namespace OldLockerTestEncTools
    {
    using System;
    using System.Collections.Generic;
    using System.Security.Cryptography;
    using System.Text;

    public class RSATool
    {
    /// <summary>
    /// Метод для шифрования текста <b>"Публичным ключём"</b>
    /// </summary>
    /// <param name="strText">Текст для шифрования</param>
    /// <param name="KeySize">Размер публичного ключа RSA</param>
    /// <param name="strPublicKey">Публичный ключ RSA</param>
    /// <returns>Шифрованный текст</returns>
    public string Encrypt(string strText, int KeySize, string strPublicKey)
    {
    using (var rsa = new RSACryptoServiceProvider(KeySize))
    {
    rsa.FromXmlString(strPublicKey);

    byte[] byteText = Encoding.UTF8.GetBytes(strText);
    byte[] byteEntry = rsa.Encrypt(byteText, false);

    return Convert.ToBase64String(byteEntry);
    }
    }

    /// <summary>
    /// Метод для расшифровки текста <b>"Приватным ключём"</b>
    /// </summary>
    /// <param name="strEntryText">Текст для расшифровки</param>
    /// <param name="KeySize">Размер приватного ключа RSA</param>
    /// <param name="strPrivateKey">Приватный ключ RSA</param>
    /// <returns>Расшифрованный текст</returns>
    public string Decrypt(string strEntryText, int KeySize, string strPrivateKey)
    {
    using (var rsa = new RSACryptoServiceProvider(KeySize))
    {
    rsa.FromXmlString(strPrivateKey);

    byte[] byteEntry = Convert.FromBase64String(strEntryText);
    byte[] byteText = rsa.Decrypt(byteEntry, false);

    return Encoding.UTF8.GetString(byteText);
    }
    }

    /// <summary>
    /// Метод для генерации приватного и закрытого ключа RSA
    /// </summary>
    /// <param name="KeySize">Размер ключа RSA</param>
    /// <returns></returns>
    public Dictionary<string, string> GetKey(int KeySize)
    {
    var dictKey = new Dictionary<string, string>();
    using (var rsa = new RSACryptoServiceProvider(KeySize))
    {
    dictKey.Add("PublicKey", rsa.ToXmlString(false));
    dictKey.Add("PrivateKey", rsa.ToXmlString(true));
    }

    return dictKey;
    }
    }
    }
    Использовать можно так:
    Код
    namespace OldLockerTestEncTools
    {
    using System;
    using System.Collections.Generic;

    internal static class Program
    {
    [STAThread]
    public static void Main()
    {
    string encryptedText = "r3xq1";
    Console.Title = "RSA 2048 string Encryption/Decryption";

    const int KEY_SIZE = 2048;
    EncTools.RSATool myRSA = new EncTools.RSATool();
    Dictionary<string, string> dictK = myRSA.GetKey(KEY_SIZE);

    Console.WriteLine($"Оригинальный текст: {encryptedText}");
    string Encrypt = myRSA.Encrypt(encryptedText, KEY_SIZE, dictK["PublicKey"]);
    Console.WriteLine($"Зашифрованный текст: {Encrypt}");

    string Decrypt = myRSA.Decrypt(Encrypt, KEY_SIZE, dictK["PrivateKey"]);
    Console.WriteLine($"Расшифрованный текст: {Decrypt}");
    Console.Read();
    }
    }
    }
    Использование с сохранение в файл и чтение из файла:
    Код
    namespace OldLockerTestEncTools
    {
    using System;
    using System.Collections.Generic;
    using System.IO;

    internal static class Program
    {
    private static readonly string CurrDir = Environment.CurrentDirectory;

    [STAThread]
    public static void Main()
    {
    string encryptedText = "r3xq1";
    Console.Title = "RSA 2048 string Encryption/Decryption";

    // Размер ключа для шифрования/расшифровки
    const int KEY_SIZE = 2048;

    EncTools.RSATool myRSA = new EncTools.RSATool();

    // Получения ключей по размеру основного ключа
    Dictionary<string, string> dictK = myRSA.GetKey(KEY_SIZE);

    // Путь к файлу для публичного ключа
    string Publickey = Path.Combine(CurrDir, "publickey.key");

    // Путь к файлу для приватного ключа
    string Privatekey = Path.Combine(CurrDir, "PrivateKey.key");

    // Сохранение ключей в разные файлы
    File.WriteAllText(Publickey, dictK["PublicKey"]);
    File.WriteAllText(Privatekey, dictK["PrivateKey"]);

    Console.WriteLine($"Оригинальный текст: {encryptedText}");

    // Чтение ключей из файлов
    string encryptread = File.ReadAllText(Publickey);
    string decryptread = File.ReadAllText(Privatekey);

    // Шифрование текста
    string Encrypt = myRSA.Encrypt(encryptedText, KEY_SIZE, encryptread);
    Console.WriteLine($"Зашифрованный текст: {Encrypt}");

    // Расшифровка текста
    string Decrypt = myRSA.Decrypt(Encrypt, KEY_SIZE, decryptread);
    Console.WriteLine($"Расшифрованный текст: {Decrypt}");

    Console.Read();
    }
    }
    }
    Вот и всё!)
     
  2. CoderVir
    сяб. Я чёт делал через DES, ну хз.
     
  3. PEUCUK
    PEUCUK 14 мар 2021 Начинать нужно сейчас.zelenka.guru/threads/2853731 20 045 20 май 2020
    Нихуя себе простенький, я ахуел
     
  4. Ljopv91rdewr
    Ljopv91rdewr 14 мар 2021 449 4 май 2019
    Капец топ кодер, никто ж без тебя не умеет гуглить
     
  5. danny1713
    danny1713 14 мар 2021 2 14 апр 2020
    Спасибо
     
Загрузка...
Top