Крипточуваки - 13
ECB вирізка і вставка
Напишіть процедуру розбору k=v, як для структурованої кукі. Процедура повинна приймати:
foo=bar&baz=qux&zap=zazzle
… і повертати:
{
foo: 'bar',
baz: 'qux',
zap: 'zazzle'
}
(ну ви знаєте, об’єкт; мені байдуже якщо ви зконвертували його до JSON).
Тепер напішіть функцію яка кодує профіль користувача у цьому форматі, даючи адрес електронної пошти. У вас повинно бути щось таке:
profile_for("foo@bar.com")
… і воно повинно зробити:
{
email: 'foo@bar.com',
uid: 10,
role: 'user'
}
… закодоване як:
email=foo@bar.com&uid=10&role=user
Ваша функція “profile_for” повинно не дозволяти метасимволів кодування (& та =). Проковтніть їх, зробіть ескейпінг, зробіть що бажаєте, але не дозволяйте людям встановити їх електронну пошту як “foo@bar.com&role=admin”.
Тепер, дві більш легкі функції. Сгенеруйте випадковий AES ключ, потім:
- Зашифруйте кодований профіль користувача під ключем; “надайте” це “нападнику”.
- Розшифруйте закодований профіль користувача та розберіть його.
Використовуючи лише введені користувачем дані profile_for() (як оракул для створення «дійсних» зашифрованих текстів) і самі зашифровані тексти, створіть профіль із role=admin.