C# Читая назад зашифрованные пароли

Я думаю, вы просто неправильно указали свой код

Dim File As Variant
Dim MsgBox_Response As Long
Dim LineFromFile As String
Dim LineItems As Variant
Dim RowCounter As Long

File = Application.GetOpenFilename _
("CSV Files (*.csv), *.csv", , "Select the CSV file", , False)

If File = False Then
    MsgBox_Response = MsgBox("File could not be opened or is not compatible", vbOKOnly)
Else
    Open File For Input As #1

    ' Update this with your sheet reference
    With Sheet1
        Do Until EOF(1)
            Line Input #1, LineFromFile

            LineItems = Split(LineFromFile, ",")
            ' Increment row counter
            RowCounter = RowCounter + 1
            .Range("A" & RowCounter).Resize(, UBound(LineItems) + IIf(LBound(LineItems) = 0, 1, 0)).Value2 = LineItems
            Debug.Print Join(LineItems, vbTab)
        Loop
    End With
    Close #1
End If
5
задан NotMe 6 November 2008 в 16:16
поделиться

11 ответов

SHA1 является хеш-алгоритмом, не алгоритмом шифрования. Хеш-алгоритм является односторонней функцией, которая преобразовывает данные в хеш тех данных, но исходные данные не могут быть возвращены от хеша. Алгоритм шифрования является двухсторонней функцией, которая преобразовывает данные в зашифрованные данные, и зашифрованные данные могут затем быть преобразованы назад в исходные данные.

32
ответ дан 18 December 2019 в 05:11
поделиться

Для безопасного хранения пароля так, чтобы это могло быть считано назад используйте класс ProtectedData.

public static string ProtectPassword(string password)
{
    byte[] bytes = Encoding.Unicode.GetBytes(password);
    byte[] protectedPassword = ProtectedData.Protect(bytes, null, DataProtectionScope.CurrentUser);
    return Convert.ToBase64String(protectedPassword);
}

public static string UnprotectPassword(string protectedPassword)
{
    byte[] bytes = Convert.FromBase64String(protectedPassword);
    byte[] password = ProtectedData.Unprotect(bytes, null, DataProtectionScope.CurrentUser);
    return Encoding.Unicode.GetString(password);
}
12
ответ дан 18 December 2019 в 05:11
поделиться

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

8
ответ дан 18 December 2019 в 05:11
поделиться

Вы не делаете.

SHA1 является хешем, не шифрованием. Это - односторонняя операция; преобразование назад не возможно.

(Хорошо это не строго верно; если у Вас есть таблица возможных значений SHA1 и значений простого текста, таблица радуги затем, Вы могли бы быть удачей),

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

7
ответ дан 18 December 2019 в 05:11
поделиться

Хорошо, таким образом, я знаю, что это не отвечает на Ваш определенный Q, но почему Вы хотите преобразовать его назад?

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

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

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

Я думаю, что одна из точек использования хешей - то, что они не могут быть вычислены назад.

Как кто-то еще сказал, вычислите хеш от пароля пользователя и сравните с сохраненным значением хэш-функции.

2
ответ дан 18 December 2019 в 05:11
поделиться

Для использования Системы. Безопасность. Криптография. Класс ProtectedData, необходимо добавить ссылку на Систему. Безопасность к Вашему проекту.

(Щелкните правой кнопкой мыши по папке References, выберите "Add Reference...", найдите Систему. Безопасность на Вкладке.NET)

2
ответ дан 18 December 2019 в 05:11
поделиться

Гм, просто любопытный, но разве который не возвратил бы тот же хеш для всех паролей той же длины?

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

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

Это сказанное, SHA1, как известно, имеет слабые места, и необходимо выбрать более сильный алгоритм. Если Вы хотите остаться в семействе SHA, SHA512 довольно хорош.

0
ответ дан 18 December 2019 в 05:11
поделиться

Вы хотите использовать шифрование, не хеширующее. SHA прекрасен, но используйте методы шифрования для него. Проблема с шифрованием всегда в том состоит, куда поместить ключ для него. Вы не упоминали, было ли это рабочей станцией или сервером, на котором Вы делали это. На сервере я нахожу, что он лучше просто использует ACL для ограничения доступа к reg ключу. Администраторы могут обычно получать доступ к ключу шифрования, так или иначе... у Вас должно быть некоторое доверие где-нибудь. На рабочей станции затем можно пойти с шифрованием и сохранить ключ в коде или использовать сертификат и ограничить доступ к нему, по крайней мере, в среде корпорации... не для программного обеспечения продаж).

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

0
ответ дан 18 December 2019 в 05:11
поделиться

Я заметил недавнее добавление класса XMLEncryptedData. Для шифрования данных к XML-файлу действительно ли метод XMLEncryptedData более желателен, чем метод DPAPI?

0
ответ дан 18 December 2019 в 05:11
поделиться
Другие вопросы по тегам:

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