день еб_сь с этим AES и все какие-то ошибки, гугл и стаковерфло не помогают.
Сейчас вот: CryptographicException: Padding is invalid and cannot be removed
Тупо кодирую и сразу декодирую масив байтов, без всяких преобразований.
decrypt password (encrypt password data)
Эт в фаршчат надо. И призывать дух Айрата
Да при чем тут F#? Это .NET библиотека шифрования, на C# у тебя точно такой же код будет.
Я не спорю, просто текущий код фаршевый, его только гуру фаршчата прочтут. Был бы на C# - попробовал бы помочь.
Хорошо тралировать, там код элементарный. Добавить туда ({;}) и будет один в один С#
Окей. А если Padding заменить на Zeros?
Декодирует мусор, при этом каждый запуск мусор разный. А должна изначальную строку.
Код для теста let input = "Lorem ipsum dolor sit amet, consectetur adipiscing elit." input |> Encoding.UTF8.GetBytes |> encrypt "test-password" |> decrypt "test-password" |> Encoding.UTF8.GetString |> printfn "Expected:\n%s\n\nActual:\n%s" input
Ты в курсе что у тебя длина ключа должна быть равна длине блока?
Ну MD5 возвращает 128 бит, вроде это размер блока в AES
А, я по вашей цепочке не добрался до кода и думал что ты напрямую эти байты кормишь. Нет, то что у тебя рандомный выхлоп это ни разу не норм. Но и мд5 не факт что соответствует размеру блока, там вроде три варианта может быть, я бы это перепроверил.
OK, разобрались - проблема была что AES диспозился при выходе из makeAes В итоге дальше по коду он был невалиден)
А как так - диспоузился?😳
там был use - то же самое что using в C#
Ну если посмотреть код, то там use aes = Aes.Create() по C#-ному это (фича: C# 8.0 using) using var aes = Aes.Create();
Аааа, я подумал, что это нотация объявления переменной по типу var. 🤷♂
в фарше есть let вместо вар)
Обсуждают сегодня