Сохранение SecureString

Внутри текущего репозитория, где я работаю, я делаю эту работу: |

git remote add morgoao git@github.com:RecoX/cvs2gitao.git
git fetch morgoao
git rebase -X theirs morgoao/master

Просто отметьте, что в rebase theirs противоположно тому, что вы думаете, это текущая ветвь, в которой вы шагаете момент.

И это работает как шарм:)

Для получения дополнительной информации я написал учебник: https://medium.com/@requitolucas/importar-repositorio-cvs-a-git-sourceforge -a-GitHub-де-Manera-Facil-20c63344bfa5

7
задан Merus 29 September 2008 в 07:08
поделиться

6 ответов

Нет никаких, сохраняют поддержку в SecureString, она предназначается как механизм для защиты управляемой строки в оперативной памяти и только используется для взаимодействия через интерфейс с неуправляемыми API. Если пароль был сохранен в Системе. Строковый экземпляр, безопасность произошла бы менее из-за природы Системы. Строка. Существование сборки "мусора" и интернирования сохранило бы пароль в памяти дольше, чем необходимый. Также из-за изобилия больших средств отладки для.NET, было бы значительно легче получить доступ к строке посредством отражения или другого API.NET даже без более длительного времени жизни.

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

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

5
ответ дан 6 December 2019 в 11:54
поделиться

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

3
ответ дан 6 December 2019 в 11:54
поделиться

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

3
ответ дан 6 December 2019 в 11:54
поделиться

Вы могли бы хотеть посмотреть на сравнение хэша пароля.
Вам сделали бы соль имени пользователя и вероятно некоторой другой константы, сопровождаемой строкой. Затем Вы передали бы это алгоритму хеширования, как SHA1*.
Например,

using System.Security.Cryptography;

public byte[] GetPasswordHash(string username, string password, string salt)
{
    // get salted byte[] buffer, containing username, password and some (constant) salt
    byte[] buffer;
    using (MemoryStream stream = new MemoryStream())
    using (StreamWriter writer = new StreamWriter(stream))
    {
        writer.Write(salt);
        writer.Write(username);
        writer.Write(password);
        writer.Flush();

        buffer = stream.ToArray();
    }

    // create a hash
    SHA1 sha1 = SHA1.Create();
    return sha1.ComputeHash(buffer);
}

Затем Вы сравнили бы результат для GetPasswordHash(username, expectedPassword, salt) кому: GetPasswordHash(username, givenPassword, salt).
При реализации собственного списка пользователей с именами пользователей и паролями Вы могли бы рассмотреть только сохранение хеша (GetPasswordHash(username, givenPassword, salt)) и выдерживая сравнение с сохраненным хешем.

4
ответ дан 6 December 2019 в 11:54
поделиться

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

Я не думаю, что можно использовать SecureString на нем все же.

1
ответ дан 6 December 2019 в 11:54
поделиться

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

Вы также не можете только получить доступ, например, свойство "Password" от объекта securestring, поскольку нет такой вещи. необходимо использовать Маршалинг и определенную инфраструктуру, чтобы сделать это. если Вы хотите сохранить удостоверения пользователя где-нибудь, я предлагаю шифровать их самостоятельно, поскольку это упрощает более позднюю разработку. после оценки подхода SecureString мы решили реализовать что-то нами, но это просто мои 2 цента.

1
ответ дан 6 December 2019 в 11:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: