Domanda

Il mio utente dispone di un campo password come “ZWQ2 0!” Salvato nel database. Devo decodificare la password input dell'utente da “aA1234” a “0! ZWQ2” e confrontarlo con i dati in un database.

I 2 stringhe che metto a confronto è:

“abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890” Con “! 9setybcpqwiuvxr108daj5'-` ~ @ # $% ^ & * () _ + |}] [{:.? / <> ,; ZWQ2 @ # 34kDa”

In questo modo a = 9 e 0 = A

Come faccio a fare questo in C #, tutte le idee?

Ho solo bisogno di scendere in campo password dal input dell'utente e arrampico in testo divertente per confrontarlo con i dati nel database.

Ogni aiuto sarà apprezzato.

Saluti Etienne

Aggiornamenti: (10 feb 2009) Grazie a tutti per le risposte. Si prega di notare che mi rendo conto che ci sono molto modi migliori di handeling questo. Ma vi prego di notare che io sono la creazione di un ASP.NET questo è applicativi goign di essere seduto all'interno di SharePoint collegamento ai dati di file flat Cobol e non una base di dati adeguata. Utilizzando Transoft per collegare il mio ASP.NET (connettore ODBC) per i file flat Cobol. Quindi devo attaccare con questo codice, e questo non verrà utilizzato sul mio sito privato. Ho anche alcun controllo su quando la password viene creato in Cobol.

È stato utile?

Soluzione

In seguito è rapido, veloce, e meno codice di esempio per la conversione.

Codice in C #:

        char[] OriginalChars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890".ToCharArray();
        char[] ScrambleChars = "9setybcpqwiuvxr108daj5'-`~!@#$%^&()+|}][{:.?/<>,;ZWQ2@#34KDART".ToCharArray();
        string TextToTransfer = "Hello";
        string NewText = "";
        foreach (char c in TextToTransfer)
        {
            NewText = NewText + ScrambleChars[Array.IndexOf<char>(OriginalChars, c)].ToString();
        }
        Console.WriteLine(NewText);

Codice in VB:

    Dim OriginalChars() As Char = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890"
    Dim ScrambleChars() As Char = "9setybcpqwiuvxr108daj5'-`~!@#$%^&()+|}][{:.?/<>,;ZWQ2@#34KDART"
    Dim TextToTransfer As String = "Hello"
    Dim NewText As String = ""
    For Each c As Char In TextToTransfer
        NewText += ScrambleChars(Array.IndexOf(OriginalChars, c))
    Next
    MsgBox(NewText)

Altri suggerimenti

Qual è il motivo speciale per non usare un hash standard + sale per memorizzare le password, al posto di un cifrario Cesari?

Un modo che dovrebbe risolverlo (codice non testato):

new string("aA1234".ToCharArray().Select(c => ScrambleChars[OriginalChars.IndexOf(c)]).ToArray());

Si consiglia di non salvare le password del database in un modo che può essere invertito. L'amministratore del database o un hacker intrusione vostro sistema non dovrebbe essere in grado di ottenere le password memorizzate dell'utilizzatore.

In primo luogo, come altri utenti hanno dichiarato, se si progetta questo sistema e metodo di memorizzazione delle password, allora questo metodo è quasi inutile e ci sono molti metodi più sicuri che devono essere utilizzati al posto.

Tuttavia, il fatto che si sta chiedendo per questo di fare il confronto mi fa pensare che non si ha il controllo su ciò che è già presente nel database e quindi stanno lavorando con qualcosa di eredità.

La funzione di seguito prenderà la password degli utenti come una stringa e restituire la password del database sotto forma di stringa. Una cosa da notare, le due stringhe che hai fornito non sono di uguale lunghezza e quindi sarebbe in crash per i caratteri 9 e 0. ho aggiunto a altre lettere B e C per la stringa dbChars. Inoltre, ho "supposto" che tutti i caratteri inseriti, che non può essere trovato nei personaggi di mappatura sono solo contenuta entrato. Si può richiedere che questi personaggi vengono ignorati.

    private string DatabasePassword(string userPassword)
    {
        //Constants showing mapping between user password and database password
        const string userChars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890";
        const string dbChars   = "9setybcpqwiuvxr108daj5'-`~!@#$%^&()+|}][{:.?/<>,;ZWQ2@#34KDABC";

        //Stringbuilder used to build the database password for output
        System.Text.StringBuilder databasePassword = new System.Text.StringBuilder();

        //Run through every character in the user password
        foreach (Char userChar in userPassword)
        {
            //Find the index of the user character in the userChars string.
            int userCharIndex = userChars.IndexOf(userChar);

            //if the userChar exists in the userChars string then map the character to the
            //equivalent database pasword character else just use the entered char
            char mappedChar = userCharIndex >= 0 ? dbChars[userChars.IndexOf(userChar)] : userChar;

            //Append mapped password to the output database password
            databasePassword.Append(mappedChar);
        }

        return databasePassword.ToString();
    }

mi piacerebbe scrivere un programma di utilità di classe che contiene un Encode o un metodo che prende l'inputString e (controlli per ogni ingresso cattivo / dannoso) Traduci trasfigura utilizzando il tuo cifrario-metodo.

return String.Compare(dbPassword, PasswordUtility.Encode(inputString));
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top