Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 如何解密使用HMACSHA1加密的字符串?_.net_Cryptography_Sha1_Hmac_Cryptographic Hash Function - Fatal编程技术网

.net 如何解密使用HMACSHA1加密的字符串?

.net 如何解密使用HMACSHA1加密的字符串?,.net,cryptography,sha1,hmac,cryptographic-hash-function,.net,Cryptography,Sha1,Hmac,Cryptographic Hash Function,我是一个加密新手,尝试在系统之间来回传递一些值。我可以加密这个值,但似乎不知道如何在另一端解密。我使用VB.NET创建了一个简单的Windows窗体应用程序。尝试输入一个值和一个密钥,加密然后解密以获得原始值。这是到目前为止我的代码。非常感谢您的帮助。谢谢 Imports System Imports System.IO Imports System.Security.Cryptography Imports System.Text Public Class Form1 Privat

我是一个加密新手,尝试在系统之间来回传递一些值。我可以加密这个值,但似乎不知道如何在另一端解密。我使用VB.NET创建了一个简单的Windows窗体应用程序。尝试输入一个值和一个密钥,加密然后解密以获得原始值。这是到目前为止我的代码。非常感谢您的帮助。谢谢

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
导入系统
导入System.IO
导入System.Security.Cryptography
导入系统文本
公开课表格1
私有子btnEncode_Click(ByVal发送方作为System.Object,ByVal e作为System.EventArgs)处理btnEncode。单击
将hmacsha1调整为新的hmacsha1(Encoding.ASCII.GetBytes(txtKey.Text))
Dim hashValue As Byte()=hmacsha1.ComputeHash(Encoding.ASCII.GetBytes(txtValue.Text))
Text=BytesToHexString(hashValue)
hmacsha1.Clear()
端接头
私有子btnDecode_Click(ByVal发送方作为System.Object,ByVal e作为System.EventArgs)处理btnDecode。单击
'???
端接头
私有函数BytesToHexString(ByVal字节作为Byte())作为字符串
Dim输出为String=String.Empty
尺寸i为整数=0
当i
HMAC-SHA1是单向算法,而不是双向算法。你不能解密它。我没有时间在这里提供完整的加密代码——这是一个复杂的主题,但是Barry Dorrans会给你一个很好的起点。(只有一部分是ASP.NET特有的。)你也可以看看他关于这个主题的演讲。

只是为了进一步阐述Jon的答案,因为你可能想知道加密一些你无法解密的东西的意义是什么——正如Jon所说,HMAC-SHA1是一个散列。生成的字符串不包含原始信息,即使是以加密形式。。。这只是一个字节序列

然而,散列的美妙之处在于,您可能对字符串进行的任何类型的更改几乎肯定会导致散列结果的更改,而散列结果往往相当小。出于这个原因,哈希通常用于确保一条信息没有被篡改

比如说,

我想给乔恩捎个口信——我想让他相信,在他读到这封信之前,他的一个同伴没有改变这封信。我不能只是把我的消息的散列信息一起发送,因为麻烦制造者所要做的就是用他们自己的消息替换消息,并提供适当的散列信息

但是,如果我给我的消息提供的不是消息本身的散列,而是带有John和我事先约定的几个特定额外字节的消息的散列,那么麻烦制造者就失败了。Jon知道在散列我的消息之前添加额外的字节(通常称为satting the hash),但麻烦制造者不知道-因此,如果他更改消息,即使他自己计算出散列,Jon也会发现有问题

百科全书/散列是一项复杂的工作,我自己也几乎没有触及表面——但我想这可能会给你一个简单的例子,说明散列的用途

另一个非常常见的用途是维护站点成员信息-人们不存储密码,而是存储密码的散列。这意味着,即使有人设法窃取您的用户数据,他们也无法使用它登录到您的系统


Martin

一个简单的单向散列解释,解释人们为什么要这么做

假设您有一个用户名为John、密码为Doe的用户帐户。存储以下字符串的哈希值

姓名、您最喜爱的号码及其所选密码

例如:hash=myHash(“john7@password))

现在散列是安全的,在大多数情况下,无法反转回去找出您最喜欢的数字。要检查哈希值是否是登录的正确值,您需要对提供的输入(姓名、您的号码或w/e、密码)进行哈希,如果您得到相同的哈希值,则这是一笔有效交易。这不是很简单吗


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

Sha-1是单向散列。HMAC-SHA1是消息身份验证代码。这些显然不是一回事。更精确一点真的会有帮助。这是一个复杂的主题-记录在案,hmac_哈希实现有代码和伪代码。当Jon Skeet回答你一个问题时,你会有这种感觉。。。我们都羡慕你,亲爱的已经离去的朋友。
             now hash = "qk239qa*@$)(*84509053903" or whatever