Я не знаю, насколько это будет по теме, но возможно может навести на какие-то мысли для поиска таких вопросов. Некоторое время назад я задал двум ИИ, ChatGPT и Gemini, следующий вопрос:
Для написания теста для моего приложения, мне надо придумать пару login:password. Эта пара будет использоваться в HTTP заголовке Authorization: Basic ...
, и её BASE64 представление обязательно должно включать символы +
и /
из алфавита BASE64. Сама пара login:password должна состоять из символов, которые можно набрать с клавиатуры. Можешь ли ты придумать мне такую пару?
С задачей не справился ни один. Оба начали пытаться действовать методом перебора, тогда пришлось напрячь мозги самому и получить такой ответ (пропускаю промежуточные рассуждения):
Чтобы получить в BASE64 представлении строки символ /
, в позиции строки, кратной трём, должен находиться символ ?
. Чтобы получить в BASE64 представлении строки символ +
, в позиции строки, кратной трём, должен находиться символ >
или ~
.
Вот пример подходящей мне пары:
user:abc?12>3
Её BASE64 представление:
dXNlcjphYmM/MTI+Mwo=
Update
Выше процитирован мой промпт для Gemini, и можно было бы предположить, что он начал действовать методом перебора, потому что я использовал слово "придумать". Но вот я поднял историю от ChatGPT, и для него мой промпт выглядел следующим образом (дословно):
For the test purposes, I need a basic auth login/password pair, where login and password are printable and keyboard-enterable strings, which pair, been encoded in BASE64, contain the /
character from BASE64 alphabet.
Здесь не было никакого аналога слову "придумать", и тем не менее ChatGPT, так же как и Gemini, начал пытаться найти ответ методом перебора, а не анализом алгоритма кодирования BASE64.
Update 2
Похоже, что для тех читателей, которым незнаком термин "HTTP Basic Auth", формулировка вопроса действительно непонятна. Ну что ж, хоть для обоих ИИ, которым был задан этот вопрос, было абсолютно понятно, что именно я хочу получить от них в качестве результата, попробую привести более подробное объяснение.
Для протокола HTTP существует механизм авторизации "Basic HTTP Authentication", описанный в RFC 7617. Суть его заключается в том, что для веб-сервера задаётся некая база логинов и паролей, а само сочетание логина и пароля передаётся в HTTP-запросе в заголовке Authorization: Basic <string>
, где <string>
- это ASCII-строка, представляющая из себя строку <login>:<password>
(логин:пароль), закодированную по методу кодирования BASE64. Алфавит символов, используемый в BASE64, включает в себя 64 символа - заглавные и прописные буквы латинского алфавита, цифры, а так же два дополнительных символа /
и +
.
От ИИ в данном случае я хотел, чтобы они выдали мне такую пару "логин:пароль", чтобы её BASE64-кодированное представление включало в себя символы /
и +
, а сами логин и пароль состояли бы из символов, которые можно ввести с клавиатуры. Пример такой пары:
- логин:
user
- пароль:
abc?12>3
- строка "логин:пароль" целиком:
user:abc?12>3
- BASE64 представление этой строки:
dXNlcjphYmM/MTI+Mwo=