RijndaelManaged Decryption - Как я могу изящно удалить отступ / 0? - PullRequest
7 голосов
/ 11 марта 2011

Как я могу удалить отступы из расшифрованной строки?Я использую RijndaelManaged провайдера для шифрования и дешифрования.Когда я расшифровываю, в конце строки есть несколько /0/0/0/0/0/0.У меня вопрос, как я могу изящно (правильно) удалить символы из строки результата?

Ответы [ 4 ]

10 голосов
/ 11 марта 2011

Скорее всего, вы не используете правильные режимы заполнения и блокировки экземпляра RijndaelManaged (в следующем коде это называется провайдером). Поскольку все поставщики симметричного шифрования в .NET являются блочными шифрами, эти настройки влияют на работу дополнения (а также на то, насколько безопасным будет вывод).

Приведенные ниже настройки обеспечат вам максимальную безопасность при использовании RijndaelManaged:

// set the padding algorithm
provider.Padding = PaddingMode.ISO10126; // default is PKCS7
// set the block chaining mode
provider.Mode = CipherMode.CBC;

Если вы не тот, кто шифрует данные, и вы не можете выяснить, какие настройки использовала исходная сторона, то вы найдете помощь в некоторых других ответах:)

5 голосов
/ 11 марта 2011

Используя TrimEnd(), вот так:

theString.TrimEnd("/0");
1 голос
/ 11 марта 2011

Вы можете добавить префикс длины строки к началу строки перед тем, как зашифровать их оба, а затем, после расшифровки, использовать длину, чтобы определить, где заканчивается строка.

Или вы можете кодировать строку base64 перед ее шифрованием, а затем декодировать.

Или закодируйте его с помощью двоичного или XML-сериализатора перед шифрованием.

Все эти методы имеют то преимущество, что они позволяют вам восстановить именно ту строку, которая была сохранена. Любой метод, который принимает текущий вывод и догадывается, какое преобразование применить, не имеет этого свойства.

0 голосов
/ 11 марта 2011

Я не понимаю, как это связано с шифрованием.IIUC вы уже закончили расшифровку и получили строку в виде открытого текста, в конце которой есть что-то, что вы хотите удалитьЕсли это так, ваш вопрос касается работы со строками, и не имеет значения, какой алгоритм шифрования вы используете.Но, может быть, я неправильно понял??

Предложение (возможно, не правильное, но вы поймете):

string pattern = (i % 2 == 0? "/0" : "0/");
var sb = new StringBuilder(s);

int i = s.Length - 1;
while (sb[i] == pattern[i % 2]) --i;
sb.Length = i;
s = sb.ToString();
...