Зашифровать перезаписываемый файл в С#

215
13 сентября 2018, 13:10

есть бот помощник для биржи, помогите с защитой.Он создаёт текстовый файл с апи и секретом в каталоге, но как его не засовывай все равно легко найти, как можно его зашифровать или вообще что бы не писал ,мне достаточно если я в коде где то его пропишу и все раз и навсегда.

        /// <summary>
    /// загрузить настройки сервера из файла
    /// </summary>
    public void Load()
    {
        if (!File.Exists(@"socket\" + @"api.txt"))
        {
            return;
        }
        try
        {
            using (StreamReader reader = new StreamReader(@"socket\" + @"api.txt"))
            {
                UserId = reader.ReadLine();
                UserKey = reader.ReadLine();
                _countDaysTickNeadToSave = Convert.ToInt32(reader.ReadLine());
                _neadToSaveTicks = Convert.ToBoolean(reader.ReadLine());
                IsDemo = Convert.ToBoolean(reader.ReadLine());
                reader.Close();
            }
        }
        catch (Exception)
        {
            // ignored
        }
    }
    /// <summary>
    /// сохранить настройки сервера в файл
    /// </summary>
    public void Save()
    {
        try
        {
            using (StreamWriter writer = new StreamWriter(@"socket\" + @"api.txt", false))
            {
                writer.WriteLine(UserId);
                writer.WriteLine(UserKey);
                writer.WriteLine(CountDaysTickNeadToSave);
                writer.WriteLine(NeadToSaveTicks);
                writer.WriteLine(IsDemo);
                writer.Close();
            }
        }
        catch (Exception)
        {
            // ignored
        }
    }

Помощник в открытом доступе нашел, вот и хочу переделать под себя, а страшно оставлять на сервере например. Я просто только не давно изучаю , помогите, пожалуйста.
Нашел пример но не могу сообразить как хотя бы параметр UserKey шифровать и расшифровывать.

        static void Main(string[] args)
    {
        ushort secretKey = 0x0088; // Секретный ключ (длина - 16 bit).

        string str = "Hello World"; //это строка которую мы зашифруем
        str = EncodeDecrypt(str, secretKey); //производим шифрование
        Console.WriteLine(str);  //выводим в консоль зашифрованную строку
        str = EncodeDecrypt(str, secretKey); //производим рассшифровку 
        Console.WriteLine(str);             //выводим в консоль расшифрованную строку
        Console.ReadKey();
    }
    public static string EncodeDecrypt(string str, ushort secretKey)
    {
        var ch = str.ToArray(); //преобразуем строку в символы
        string newStr = "";      //переменная которая будет содержать зашифрованную строку
        foreach (var c in ch)  //выбираем каждый элемент из массива символов нашей строки
            newStr += TopSecret(c, secretKey);  //производим шифрование каждого отдельного элемента и сохраняем его в строку
        return newStr;
    }
    public static char TopSecret(char character, ushort secretKey)
    {
        character = (char)(character ^ secretKey); //Производим XOR операцию
        return character;
    }

Или вот тоже пример но как его применить не пойму:

// Шифруем текст, и записываем его в файл
FileStream stream = new FileStream("C:\\mytext.txt", FileMode.OpenOrCreate, FileAccess.Write);
DESCryptoServiceProvider cryptic = new DESCryptoServiceProvider();
cryptic.Key = ASCIIEncoding.ASCII.GetBytes("ABCDEFGH");
cryptic.IV = ASCIIEncoding.ASCII.GetBytes("ABCDEFGH");
CryptoStream crStream = new CryptoStream(stream,
   cryptic.CreateEncryptor(),CryptoStreamMode.Write);

byte[] data = ASCIIEncoding.ASCII.GetBytes("Hello World!");
crStream.Write(data,0,data.Length);
crStream.Close();
stream.Close();   
//Дешифруем текст и выводим результат дешифрации в консоль
FileStream stream = new FileStream("C:\\mytext.txt", 
                              FileMode.Open,FileAccess.Read);
DESCryptoServiceProvider cryptic = new DESCryptoServiceProvider();
cryptic.Key = ASCIIEncoding.ASCII.GetBytes("ABCDEFGH");
cryptic.IV = ASCIIEncoding.ASCII.GetBytes("ABCDEFGH");
CryptoStream crStream = new CryptoStream(stream,
    cryptic.CreateDecryptor(),CryptoStreamMode.Read);
StreamReader reader = new StreamReader(crStream);
string data = reader.ReadToEnd();
Console.WriteLine(data);
Console.ReadKey();
reader.Close();
stream.Close();  
Answer 1

В таком случае надо использовать ХЭШ-коды (одностороннее шифрование). Пример можете посмотреть, например здесь: "Класс для работы с паролями в среде .NET" на сайте http://rsdn.org/

READ ALSO
WebBrowser и нестандартная письменность

WebBrowser и нестандартная письменность

Довольно специфичная проблемаЕсть приложение WPF, которое тянет компонент форм WebBrowser

207
C# Как совершить такую замену?

C# Как совершить такую замену?

Вот допустим есть у меня такой текстовик

178
Asterisk. Список абонентов в отдельном файле

Asterisk. Список абонентов в отдельном файле

Изучаю asterisk и на данный момент уже поднял сервер на Ubuntu и совершаю звонки с/на устройствахИнтересует вопрос: можно ли каким-нибудь образом...

163