2 Stimmen

Wie speichere ich ein Passwort in einem Sql-Server und rufe es ab?

Wie speichert man ein Passwort in einer Sql-Datenbank und ist es notwendig, das vom Benutzer eingegebene Passwort zu konvertieren? Ich habe versucht, das Kennwort aus dem Textfeld zu speichern, das als Kennwortmodus im Formular leer/null in der Datenbank gespeichert ist. Wenn ich deaktiviert Passwort-Modus zu Text funktioniert gut.

2voto

Zlatan Punkte 688

Das Speichern von Passwörtern in verschlüsseltem Format ist eine gute Praxis. Sie können den md5-Hashing-Algorithmus für die Verschlüsselung verwenden. Hier ist der Beispielcode für das Hashing der Zeichenfolge

using System;
using System.Text;
using System.Security.Cryptography;

// Create an md5 sum string of this string
static public string GetMd5Sum(string str)
{
// First we need to convert the string into bytes, which
// means using a text encoder.
Encoder enc = System.Text.Encoding.Unicode.GetEncoder();

// Create a buffer large enough to hold the string
byte[] unicodeText = new byte[str.Length * 2];
enc.GetBytes(str.ToCharArray(), 0, str.Length, unicodeText, 0, true);

// Now that we have a byte array we can ask the CSP to hash it
MD5 md5 = new MD5CryptoServiceProvider();
byte[] result = md5.ComputeHash(unicodeText);

// Build the final string by converting each byte
// into hex and appending it to a StringBuilder
StringBuilder sb = new StringBuilder();
for (int i=0;i<result.Length;i++)
{
    sb.Append(result[i].ToString("X2"));
}

// And return it
return sb.ToString();
}

Sie können den verschlüsselten Text nicht in eine normale Zeichenkette zurückverwandeln.

Wenden Sie sich im Zweifelsfall an uns.

1voto

JKhuang Punkte 1493

Ich schlage vor, das Passwort vor Ort zu verschlüsseln und in der Datenbank zu speichern. Im Allgemeinen speichern wir keinen Klartext in der Datenbank; daher sollte es ein verschlüsseltes Passwort sein.

Für den Datenbankentwurf,

Fügen Sie in der Datenbank zwei Felder von Chiffrierter Text y clave in der Tabelle, um den Passwortprozess und schließlich das Benutzerpasswort zu speichern.

Dann sollte das Programm das Passwort verschlüsseln und speichern Chiffrierter Text y clave in datierbare Spalten, wie erwähnt.

Wenn sich der Benutzer dann wieder anmeldet, wird der Prozess des Vergleichs von gleichem oder ungleichem Chiffriertext einen Anmeldestatus von Erfolg oder Misserfolg ergeben.


Beispiel Code

    /// <summary>
    /// Encrypts the specified hash algorithm.
    /// 1. Generates a cryptographic Hash Key for the provided text data.
    /// </summary>
    /// <param name="hashAlgorithm">The hash algorithm.</param>
    /// <param name="dataToHash">The data to hash.</param>
    /// <returns></returns>
    public static string Encrypt(HashAlgorithm hashAlgorithm, string dataToHash)
    {

        var tabStringHex = new string[16];
        var UTF8 = new System.Text.UTF8Encoding();
        byte[] data = UTF8.GetBytes(dataToHash);
        byte[] result = hashAlgorithm.ComputeHash(data);
        var hexResult = new StringBuilder(result.Length);

        for (int i = 0; i < result.Length; i++)
        {
            //// Convert to hexadecimal
            hexResult.Append(result[i].ToString("X2"));
        }

return hexResult.ToString();
}

/// <summary>
/// Determines whether [is hash match] [the specified hash algorithm].
/// </summary>
/// <param name="hashAlgorithm">The hash algorithm.</param>
/// <param name="hashedText">The hashed text.</param>
/// <param name="unhashedText">The unhashed text.</param>
/// <returns>
///   <c>true</c> if [is hash match] [the specified hash algorithm]; 
/// otherwise, <c>false</c>.
/// </returns>
public static bool IsHashMatch(HashAlgorithm hashAlgorithm,
    string hashedText, string unhashedText)
{
    string hashedTextToCompare = Encrypt(
        hashAlgorithm, unhashedText);
    return (String.Compare(hashedText,
        hashedTextToCompare, false) == 0);
}

0voto

Ali Foroughi Punkte 4480

Im Allgemeinen nein, es besteht keine Notwendigkeit, sie zu konvertieren (zumindest nach meinen Erfahrungen), aber aus Sicherheitsgründen verwenden einige Benutzer eine Verschlüsselung/Entschlüsselung Methode oder konvertieren Sie sie in base64 und der beste Weg ist ein einseitiger Algorithmus wie Hash

Ali

0voto

ton.yeung Punkte 4493

Ich gehe davon aus, dass Sie eine Art von databound control verwenden.

Ich würde ein onInserting-Ereignis erstellen und den Wert von tbPassword.text einer Variablen zuweisen, und debuggen, um zu sehen, ob das Kennwort zuerst der Variablen zugewiesen wird. Dies wäre auch, wo Sie Hash und Salz das Kennwort zu verhindern, dass jemand direkt Hacking in Ihre Datenbank von der Lage, sich als einer Ihrer Benutzer zu verhindern.

Wenn Sie die Kennwortwerte im dahinter liegenden Code speichern, können Sie den obigen Schritt onInserting überspringen und die Werte einfach dort überprüfen.

Wenn Sie auch mit einer gespeicherten Prozedur speichern, sollten Sie die Parameter ausdrucken und mit den Werten ausführen, die Sie von der Website übergeben, um zu sehen, was angezeigt wird.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X