CryptographicException: ошибка произошла во время криптографической операции - PullRequest
0 голосов
/ 06 июня 2018

У меня есть строка, которую я хочу расшифровать во время выполнения в своем приложении C # WPF.

Я подумал, что могу использовать следующий код:

using System.Text;
using System.Web;
using System.Web.Security;

    [Test]
    public void Encrypt()
    {
        var text = "This is my string";
        var stream = Encoding.UTF8.GetBytes(text);
        var encodedValue = MachineKey.Protect(stream);
        var result = HttpServerUtility.UrlTokenEncode(encodedValue);
    }

    [Test]
    public void Decrypt()
    {
        var text = "ZG1CrjMgyq5O1krnBxoYM5rXH071xVxFnhC3xTTBiJ05Uy4msSe0jonP-ayFuChh_M6EaEhMif_j7i8yUSQ4Pkc63moEbvq34hMZGfYkazo1";
        var stream = HttpServerUtility.UrlTokenDecode(text);
        var decodedValue = MachineKey.Unprotect(stream);
        var result = Encoding.UTF8.GetString(decodedValue);
    }

Однако я получаю

CryptographicException: ошибка произошла во время криптографической операции

ошибка при выполнении команды Unprotect в моем приложении WPF.Есть идеи?

- Если приведенный выше код предназначен только для работы в веб-приложении (т.е. не в WPF), почему он работает при вызове в модульном тесте?

Ответы [ 2 ]

0 голосов
/ 07 июня 2018

Теперь я понимаю, что этот шаблон все равно не сработает для меня .. Поскольку я использую клиентское приложение, любой может проверить код в моей сборке и расшифровать строку.

Явместо этого я собираюсь сделать следующее:

  • Использовать отдельное консольное приложение и закрытый ключ для шифрования моей строки.
  • Создать функцию Azure, которая имеет закрытый ключ и может расшифровывать строки.
  • Вызовите функцию Azure через SSL из моего клиентского приложения WPF для расшифровки строки.
0 голосов
/ 06 июня 2018

Попробуйте это решение, надеюсь, оно будет работать:

1.Вы определили запись "machineKey" для шифрования / дешифрования в вашем файле web.config?Если нет, то определите его.

2. Просто удалите все файлы cookie и данные кэша браузера.

3.Если вы используете формы авторизации.Вы можете выйти из системы, когда поймаете исключение и разрешите своим пользователям войти в систему и создать действительный файл cookie (добавьте его в свой global.asax)

catch (CryptographicException cex)
{
    FormsAuthentication.SignOut();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...