Pergunta

Eu sou um novato criptografia tentando passar alguns valores e para trás entre sistemas. I pode criptografar o valor, mas não consigo descobrir como para descriptografar na outra extremidade. Eu criei um simples aplicativo Windows Forms usando VB.NET. Tentando introduzir um valor e uma chave, criptografar e descriptografar para obter o valor original. Aqui está o meu código até agora. Qualquer ajuda muito apreciada. Obrigado.

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
Foi útil?

Solução

HMAC-SHA1 é um one-way de hash , não um bidirecional criptografia algoritmo. Você não pode decifrá-lo. Eu não tenho tempo para fornecer o código de encriptação completa aqui - é um tema complicado, mas Barry Dorrans' "começando ASP.NET Segurança" iria dar-lhe um bom ponto de partida. (Apenas alguns dos que é específico do ASP.NET.) Você também pode assistir a sua DDD talk sobre o tema.

Outras dicas

Apenas para expandir a resposta de Jon, porque você provavelmente está se perguntando qual é o ponto de criptografar algo que você não pode descriptografar - HMAC-SHA1 é, como Jon disse, um hash. A cadeia de caracteres produzido não contém a informação original, mesmo em forma criptografada ... É apenas uma seqüência de bytes.

A beleza do hash, porém, é que qualquer tipo de mudança que você pode fazer na seqüência quase certamente irá resultar em uma mudança no resultado hash, eo resultado hash tende a ser relativamente pequeno. Por esta razão, hashs são muitas vezes utilizados para garantir que um pedaço de informação não foi adulterado.

Por exemplo,

Eu quero enviar Jon aqui uma mensagem - e eu quero que ele seja confiante de que um de seus companheiros não mudou a mensagem antes de sua leitura. Eu não posso simplesmente tirar o hash da minha mensagem e enviá que, juntamente, porque todos um causador problema teria que fazer é substituir a mensagem com um dos seus próprios, e fornecer um hash apropriado ...

No entanto, se eu fornecer a minha mensagem com um hash não da mensagem em si, mas sim da mensagem com alguns extras específica bytes que John e eu acordaram com antecedência, o fabricante de problema é derrotado. Jon sabe para adicionar os bytes extra (vulgarmente conhecido como salgar o hash) antes que ele hashes minha mensagem, mas o causador problemas não - por isso, se ele muda a mensagem, mesmo que ele funciona seu próprio hash Jon pode ver que algo está errado ...

Encyryption / Hashes são um negócio complicadas, e eu mal arranhamos a superfície mim - mas eu pensei que isso poderia dar-lhe um exemplo simples do que hashes são usados ??para ...

Outro uso muito comum é para manter as informações de local da sociedade - as pessoas não armazenar a senha, mas o hash da senha. Isto significa que mesmo se alguém conseguir nick seus dados de usuário, eles não são capazes de usá-lo para entrar em seu sistema.

Martin

Um simples one-way hash explicação de por que as pessoas gostariam de fazê-lo.

Vamos dizer que você tem uma conta de usuário com o nome de usuário e senha John Doe. Você armazenar o hash da seguinte string.

Primeiro nome, seu número favorito, e sua senha selecionada

Por exemplo: de hash = myHash ( "john7 @ password")

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

Agora que hash é seguro e não pode ser revertido de volta para descobrir o que o seu número favorito é na maioria dos casos. Para verificar se o hash é o caminho certo para o login, você re-hash de entrada fornecido (nome, seu número ou w / e, password) e se você conseguir o mesmo hash exata, é um negócio válido. wo0t não é ele completamente simples!

- devo usar a mesma chave para re-hash de meus dados?

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top