Domanda

Sono un principiante della crittografia che cerca di trasferire alcuni valori avanti e indietro tra i sistemi.Posso crittografare il valore, ma non riesco a capire come decrittografarlo dall'altra parte.Ho creato una semplice applicazione Windows Form utilizzando VB.NET.Cercando di inserire un valore e una chiave, crittografare e quindi decrittografare per ottenere il valore originale.Ecco il mio codice finora.Qualsiasi aiuto molto apprezzato.Grazie.

Imports System
Imports System.IO
Imports System.Security.Cryptography
Imports System.Text

Public Class Form1

    Private Sub btnEncode_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnEncode.Click
        Dim hmacsha1 As New HMACSHA1(Encoding.ASCII.GetBytes(txtKey.Text))
        Dim hashValue As Byte() = hmacsha1.ComputeHash(Encoding.ASCII.GetBytes(txtValue.Text))
        txtResult.Text = BytesToHexString(hashValue)
        hmacsha1.Clear()
    End Sub

    Private Sub btnDecode_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnDecode.Click
        '???
    End Sub

    Private Function BytesToHexString(ByVal bytes As Byte()) As String
        Dim output As String = String.Empty
        Dim i As Integer = 0
        Do While i < bytes.Length
            output += bytes(i).ToString("X2")
            i += 1
        Loop
        Return output
    End Function
End Class
È stato utile?

Soluzione

HMAC-SHA1 è un senso unico hash , non un bidirezionale la crittografia algoritmo. Non puoi decifrarlo. Non ho il tempo di fornire il codice di cifratura completa - è un argomento complicato, ma Barry Dorrans' "a partire ASP.NET Security" darebbe un buon punto di partenza. (Solo alcuni di essi è specifico per ASP.NET.) Si potrebbe anche guardare il suo DDD parlare sul tema.

Altri suggerimenti

Giusto per ampliare la risposta di Jon, perché probabilmente stai chiedendo che cosa il punto è di crittografia di qualcosa che non è possibile decifrare - HMAC-SHA1 è, come ha detto Jon, un hash. La stringa prodotto non contiene le informazioni originali, anche in forma criptata ... E 'solo una sequenza di byte.

La bellezza del hash, tuttavia, è che qualsiasi tipo di cambiamento si potrebbe fare nella stringa quasi certamente comportare una variazione del risultato hash, e il risultato hash tende ad essere abbastanza piccola. Per questo motivo, hashs sono spesso utilizzati per garantire che un pezzo di informazione non è stato manomesso.

Per esempio,

Voglio inviare Jon qui un messaggio - e voglio che lui sia convinto che uno dei suoi compagni, non ha cambiato il messaggio prima della sua lettura. Non posso prendere l'hash del mio messaggio e inviare che, insieme, perché tutto un problema causer avrebbe dovuto fare è sostituire il messaggio con uno di loro, e di fornire un hash appropriata ...

Tuttavia, se fornisco il mio messaggio con un hash non del messaggio stesso, ma piuttosto del messaggio con alcuni specifici byte extra che John e io abbiamo concordato in anticipo, il creatore di difficoltà è sconfitto. Jon sa per aggiungere i byte aggiuntivi (comunemente noto come la salatura l'hash) prima di hash il mio messaggio, ma il problema causer non lo fa - quindi se cambia il messaggio, anche se lui lavora fuori il suo hash, Jon può vedere che qualcosa è sbagliato ...

Encyryption / Gli hash sono un business poco pratici, e ho appena scalfito la superficie di me stesso - ma ho pensato che questo potrebbe dare un semplice esempio di ciò che gli hash sono utilizzati per ...

Un altro uso molto comune è per mantenere le informazioni di appartenenza del sito - la gente non memorizzare la password, ma piuttosto l'hash della password. Ciò significa che anche se qualcuno riesce a nick i dati utente, non sono in grado di usarlo per accedere al sistema.

Martin

Una semplice spiegazione hash unidirezionale del motivo per cui le persone vorrebbero farlo.

Supponiamo che tu abbia un account utente con il nome utente John e la password Doe.Memorizzi l'hash della stringa seguente.

Nome, numero preferito e password selezionata

Per esempio:hash=mioHash("giovanni7@password")

             now hash = "qk239qa*@$)(*84509053903" or whatever

Ora l'hash è sicuro e non è possibile tornare indietro per capire qual è il tuo numero preferito nella maggior parte dei casi.Per verificare se l'hash è quello giusto per l'accesso, dovresti ripetere l'hash dell'input fornito (nome, numero o w/e, password) e se ottieni lo stesso hash esatto, è un affare valido.non è del tutto semplice!

--devo utilizzare la stessa chiave per eseguire nuovamente l'hashing dei miei dati?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top