Я хочу сохранить пароль, зашифрованный в локальной базе данных (на телефоне Windows). Для этого мне сначала нужно зашифровать пароль.Шифрование паролей UTF8 Кодирование Преобразование строк не работает
byte[] passwordInByte = UTF8Encoding.UTF8.GetBytes(clearPW);
byte[] protectedPasswordByte = ProtectedData.Protect(passwordInByte, null);
return UTF8Encoding.UTF8.GetString(protectedPasswordByte, 0, protectedPasswordByte.Length);
Когда я использую это я получаю encyrpted пароль, как это:
«\ 0 賐 ᔁ ᇑ 窌 쀀쉏 \ 0 쐮 毸 䉯 놜 侫 䅛 \ 0 \ 0 \ 0 \ 0 昐 \ 0À \ 0 \ 0⎛ 폳띪 ꌾ ၜ ჸ 㸴 뀲 േ Ɦ 賂 ۈ 䎳 姒 \ 0 \ 0 耎 \ 0Ȁ \ 0 \ 0tƽ 팃 ல 쿄 갗 ꪄ \ 0 ꒱ ௴ 贒 ⊡ 噷 ʥ 魚 @ \ 0 챞 Ċ 뽨뒸 縉 菒 Æ ≁ ᦹ 諻 ⋤ 떵 孵 ר 춳 ɝ⍔ ɝ⍔ ɝ⍔ ɝ⍔ ɝ⍔ ɝ⍔ И защищенный парольPasswordByte имеет длина 230 байтов.
Моя функция дешифрования выглядит следующим образом:
byte[] encryptedBytes = UTF8Encoding.UTF8.GetBytes(encrytpedPW);
byte[] passwordByte = ProtectedData.Unprotect(encryptedBytes, null);
return UTF8Encoding.UTF8.GetString(passwordByte, 0, passwordByte.Length);
Теперь массив enycrptedBytes является длиной 290 байт и пароль не может быть даже расшифрован, потому что Unprotect функция вызывает ошибку «Неверные данные»
Но все прекрасно работает в случае, если я использую функцию Convert.BaseString64 так:
шифрование:
byte[] passwordInByte = UTF8Encoding.UTF8.GetBytes(clearPW);
byte[] protectedPasswordByte = ProtectedData.Protect(passwordInByte, null);
return Convert.ToBase64String(protectedPasswordByte, 0, protectedPasswordByte.Length);
дешифрования:
byte[] encryptedBytes = Convert.FromBase64String(encrytpedPW);
byte[] passwordByte = ProtectedData.Unprotect(encryptedBytes, null);
return UTF8Encoding.UTF8.GetString(passwordByte, 0, passwordByte.Length);
ли кто-нибудь из вас есть идея, что это так неправильно о кодировке UTF8? Потому что первым способом является рекомендованный MSDN.
Извините. Unicode был всего лишь одной попыткой, и ошибка также произошла (как вы упомянули) в случае UTF8. Я изменяю его в вопросе. – Kn0rK3