문제

저는 시스템간에 몇 가지 가치를 전달하려는 암호화 초보자입니다. 값을 암호화 할 수는 있지만 다른 쪽 끝에 해독하는 방법을 알아낼 수는 없습니다. vb.net을 사용하여 간단한 Windows Forms 응용 프로그램을 만들었습니다. 값과 키를 입력하려고 시도한 후 암호화하고 해독하여 원래 값을 얻습니다. 지금까지 내 코드가 있습니다. 도움이 크게 감사드립니다. 감사.

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
도움이 되었습니까?

해결책

HMAC-SHA1은 편도입니다 해시시, 양방향이 아닙니다 암호화 연산. 당신은 그것을 해독 할 수 없습니다. 여기에 전체 암호화 코드를 제공 할 시간이 없습니다. 복잡한 주제이지만 Barry Dorrans의 "ASP.NET 보안 시작" 좋은 출발점을 줄 것입니다. (그중 일부만 ASP.NET-Specific입니다.) DDD 토크 주제에.

다른 팁

Jon의 대답을 확장하기 위해, 당신은 아마도 당신이 해독 할 수없는 무언가를 암호화하는 것이 무엇인지 궁금 할 것입니다. Jon이 말했듯이 HMAC -SHA1은 해시입니다. 생성 된 문자열에는 암호화 된 형태로도 원래 정보가 포함되어 있지 않습니다. 단지 일련의 바이트 일뿐입니다.

그러나 해시의 아름다움은 문자열에서 당신이 할 수있는 모든 종류의 변화가 거의 확실히 해시 결과의 변화를 초래할 것이며 해시 결과는 상당히 작은 경향이 있다는 것입니다. 이러한 이유로 해시는 종종 정보가 변조되지 않았는지 확인하는 데 사용됩니다.

예를 들어,

나는 존에게 메시지를 보내고 싶다. 나는 내 메시지의 해시를 가져 가서 그것을 함께 보낼 수는 없습니다. 왜냐하면 모든 문제의 원인은 메시지를 그들 자신의 하나로 바꾸고 적절한 해시를 제공하는 것이기 때문입니다.

그러나 메시지에 메시지 자체가 아니라 해시가 아니라 John과 내가 미리 동의 한 몇 가지 특정 추가 바이트가있는 메시지를 제공하면 문제 제작자가 패배합니다. Jon은 내 메시지를 해시하기 전에 여분의 바이트 (일반적으로 해시 소금으로 알려짐)를 추가하는 것을 알고 있지만 문제의 원인은 그렇지 않습니다. 따라서 자신의 해시를 해결하더라도 메시지를 변경하면 Jon은 무언가를 볼 수 있습니다. Amiss ...

암반 / 해시는 충실한 사업이며, 나는 표면을 직접 긁지 않았다 - 그러나 나는 이것이 당신에게 해시가 사용되는 것의 간단한 예를 줄 수 있다고 생각했다.

또 다른 매우 일반적인 사용은 사이트 멤버십 정보를 유지 관리하는 것입니다. 사람들은 비밀번호를 저장하지 않고 비밀번호의 해시를 저장합니다. 즉, 누군가가 사용자 데이터를 NICK에 관리하더라도 시스템을 사용하여 시스템에 로그인 할 수 없습니다.

남자 이름

사람들이 왜 그렇게하고 싶어하는지에 대한 간단한 일원 해시 설명.

사용자 이름 John 및 Password Doe가있는 사용자 계정이 있다고 가정 해 봅시다. 다음 문자열의 해시를 저장합니다.

이름, 좋아하는 번호 및 선택한 비밀번호

예 : hash = myhash ( "john7@password")

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

이제 해시가 안전하고 반대로 되돌릴 수 없어 대부분의 경우 좋아하는 숫자가 무엇인지 알아냅니다. 해시가 로그인하기에 적합한 지 확인하려면 제공된 입력 (이름, 번호 또는 w/e, 암호)을 다시 호출하고 동일한 해시를 얻는 경우 유효한 거래입니다. WO0T는 완전히 간단하지 않습니다!

-같은 키를 사용하여 데이터를 다시 해시 할 수 있습니까?

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top