DESCryptoServiceProvider .net и ограничение зашифрованного набора символов - PullRequest
1 голос
/ 15 февраля 2009

Итак, я шифрую строку с помощью .net DESCryptoServiceProvider

Можно ли ограничить набор символов зашифрованной строки, чтобы она не содержала определенных диапазонов символов?

Например / или \?

Ответы [ 2 ]

2 голосов
/ 15 февраля 2009

Является ли идея, что вы хотите перейти от строки открытого текста к зашифрованной строке? Если это так, используйте кодировку, поддерживающую весь диапазон Unicode, для преобразования из открытого текста в двоичные данные и base64 для преобразования из зашифрованного двоичного файла в «безопасный» зашифрованный текст.

Итак, шаги конвейера:

Шифрование

  • Преобразование открытого текста (строки) в открытый текст (байты) - например,

    byte[] plainBinary = Encoding.UTF8.GetBytes(plainText);
    
  • Шифрование обычным способом с помощью DESCryptoServiceProvider (plainBinary до encryptedBinary)

  • Преобразование зашифрованного двоичного файла в зашифрованный текст:

    string encryptedText = Convert.ToBase64String(encryptedBinary);
    

дешифрование:

  • Преобразование зашифрованного текста в зашифрованный двоичный файл:

    byte[] encryptedBinary = Convert.FromBase64String(encryptedText);
    
  • Расшифровывать обычным способом (encryptedBinary до plainBinary)

  • Преобразовать обычный двоичный файл в простой текст:

    string plainText = Encoding.UTF8.GetString(plainBinary);
    

В качестве альтернативы, вы можете передать данные, используя StreamWriter (для преобразования текста в двоичные файлы), CryptoStream (для шифрования DES) и ToBase64Transform, оставляя только преобразование (используя Encoding.ASCII, для пример) зашифрованных и base64-закодированных данных в конце. Затем вы бы изменили процесс, используя FromBase64Transform.

Если base64 недостаточно для ограничения создаваемых символов, вы всегда можете написать собственное преобразование в стиле base64 - все, что занимает произвольные байты и производит текст, который можно декодировать обратно в эти байты, используя только разрешенные символы , должно быть хорошо.

1 голос
/ 15 февраля 2009

Нет, но вы можете закодировать его в кодировке base64 . Поэтому он не будет содержать нетекстовых символов.

byte[] encryptedStream = ..
string encryptedString = Convert.ToBase64String(encryptedStream );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...