Как безопасно добавить SecureString в SecureString

Как добавить несколько SecureString?

потому что я не могу

SecureString pepper 
SecureString salt
SecureString pepperAndSalt = pepper + salt;

и если бы я использовал
SecureString.AppendChar (Char)
мне пришлось бы преобразовать соль в небезопасный массив символов, чего я бы хотел избежать.


person WiiMaxx    schedule 27.11.2015    source источник


Ответы (2)


Вы не можете 1, по определению:

Обратите внимание, что SecureString не имеет элементов, которые проверяют, сравнивают или преобразуют значение SecureString. Отсутствие таких членов помогает защитить ценность экземпляра от случайного или злонамеренного воздействия. Используйте соответствующие члены класса System.Runtime.InteropServices.Marshal, такие как метод SecureStringToBSTR, для управления значением объекта SecureString.

Как только вы получите ценность, вы не сможете ее выбросить.

1: если вы не хотите начать использовать неуправляемый код с помощью _ 1_, но это не позволит использовать SecureString

person Albireo    schedule 27.11.2015
comment
так что, похоже, я должен признать, что не будет способа сделать это безопасно - person WiiMaxx; 27.11.2015
comment
Нет, если вы не решите просеять неуправляемую память с помощью SecureStringToBSTR (и не забудьте очистить после себя). Но стоит ли использовать SecureString в вашем сценарии? Действительно ли это обеспечивает дополнительную безопасность? (Кстати, криптографическая соль предназначена для публичного использования.) - person Albireo; 27.11.2015
comment
Вы правы, иногда я слишком много задумываюсь и теряю все внимание - person WiiMaxx; 27.11.2015

Для решения этой проблемы можно использовать класс System.Runtime.InteropServices.Marshal, как описано в этом ответе чтобы преобразовать защищенную строку в строку, добавьте обе строки и преобразуйте объединенную строку обратно в защищенную строку

person Kayani    schedule 27.11.2015
comment
это предотвратит использование SecureString - person WiiMaxx; 27.11.2015
comment
верно, но если нет другого пути, кроме как будет компромисс между безопасностью и выполнением работы - person Kayani; 27.11.2015
comment
Преобразование SecureString обратно в String полностью лишает смысла использование SecureString. Единственный разумный способ манипулировать ими - напрямую обращаться с памятью (второй фрагмент в ответе на вопрос, который вы связали). - person Albireo; 27.11.2015