我是一个加密的新手试图通过一些值之间来回系统。我可以加密的价值,但是似乎无法找出如何解密的另一端。我已经创建了一个简单的Windows的应用程序的使用VB.NET.试图输入一个值和关键,对其进行加密和解密以得到的原始价值。这是我的码为止。任何帮助极大的赞赏。谢谢。

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是一种方式 哈希, ,不是一个双向的 加密的 算法。你不可以解密。我没有时间提供完全的加密代码在这里-这是一个复杂的题目,但是巴里Dorrans' "开始ASP.NET 安全" 会给你一个很好的起点。(只有一部分是ASP。净的具体内容。) 你也可以看着他 DDD谈谈 在主题。

其他提示

只是为了扩大对乔恩的答案,因为你可能想知道的一点是加密的东西,你无法解密的东西 - HMAC-SHA1是,作为乔恩说,哈希值。生成的字符串中不包含原始信息,即使在加密的形式...这只是一个字节序列。

散的美却是任何种类的变化,你可能使字符串中几乎肯定会导致散列结果的变化,散列结果往往是相当小的。出于这个原因,hashs常常被用来确保一段信息还没有被篡改。

例如,

我想这里给乔恩消息 - 我想他有信心,他的队友中谁没有自己的阅读它之前修改的消息。我不能只是把我的消息的哈希值,并一起发送,因为所有的故障致使者必须做的是自己的一个替代的消息,并提供适当的散列...

不过,如果我提供我的消息不是消息本身的哈希值,而是与约翰和我事先已商定了一些具体的额外的字节的消息,麻烦制造者被击败。乔恩知道他要我的哈希消息之前添加额外的字节(俗称盐析散),但麻烦致使者不 - 所以,如果他改变了消息,尽管他的作品出了自己的哈希值,乔恩可以看到的东西不妥...

Encyryption / hash是一个繁琐的业务,我很少触及表面自己 - 但我想这可能给你使用什么哈希的...一个简单的例子

另一种非常常见的用途是用于维护网站的会员信息 - 人们不存储密码,而密码的哈希值。这意味着,即使有人设法尼克用户数据,他们不能用它来登录系统。

马丁

一个简单的单向散列交代,为什么人们会想这样做。

假设你已拥有了用户John和密码豆豆的用户帐户。您存储以下字符串的哈希值。

名字,你最喜欢的数字,而他们选择的密码

例如:散列= myHash( “john7 @密码”)

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

现在散列是安全的,不能被转回找出你最喜欢的数字是在大多数情况下是什么。要检查是否哈希是正确的用于登录,你会重新散列所提供的输入(姓名,号码或W / E,密码),如果你得到完全相同的哈希值,其有效的交易。 wo0t不是它完全简单!

- 我应该使用相同的密钥来重新散列我的数据?

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top