解码编码变量

时间:2014-01-02 20:17:53

标签: vb.net security encoding decoding

我使用此函数来编码输入:

Public Function encodeStrings(ByVal MyPass As String, ByVal MyUName As String) As String
    Dim ENPass As String = Nothing
    Dim password As String = (MyPass + MyUName)
    Dim mhash As HashAlgorithm = New SHA1CryptoServiceProvider
    Dim bytValue() As Byte = System.Text.Encoding.UTF8.GetBytes(password)
    Dim bytHash() As Byte = mhash.ComputeHash(bytValue)
    mhash.Clear()
    ENPass = Convert.ToBase64String(bytHash)
    Return ENPass
End Function

现在我需要解码这个变量并取回原始字符串。

有谁知道怎么做?我在我的项目中使用VB.NET。

1 个答案:

答案 0 :(得分:3)

不,没有办法解码它。 SHA1CryptoServiceProvider实现了hashing algorithm。根据{{​​3}}:

  

计算输入数据的SHA1哈希值...

根据定义,SHA-1是一种散列算法。根据{{​​3}}:

  

在密码学中,SHA-1是由美国国家安全局设计并由美国NIST作为美国联邦信息处理标准发布的加密哈希函数。 SHA-1产生160位(20字节)哈希值。 SHA-1哈希值通常表示为十六进制数,长度为40位。

这就是为什么它继承自MSDN基类而不是Wikipedia article基类。由于它使用散列算法,这意味着它是单向编码的。原始字符串将始终产生相同的加密值,但无法解密它以恢复原始值,因为许多不同的字符串可能会导致相同的加密值(尽管使用HashAlgorithm,作为SHA1,这是不可行的)。

如果你考虑一下,那是唯一有意义的事情。如果SHA-1算法总是产生20字节长的哈希码,那么这意味着你可以编码1千兆字节的字符串,它仍然只有20字节长作为SHA-1加密的哈希值。当然,您不认为这20个字节包含最初存储在该1 GB字符串中的所有数据。如果是这种情况,压缩文件将更有效:)

通常,当使用加密哈希算法时,它将用于存储密码。在这种情况下,问题不在于如何解密密码,而是加密新输入的密码,然后比较两个加密值以查看它们是否相同。如果两个加密值相同,则表示用户输入了正确的密码。如果两个加密值不相同,那么您知道它是不正确的(但您仍然不知道正确的密码是什么)。

如果您需要双向加密算法,则需要使用继承自SymmetricAlgorithm的算法,例如SymmetricAlgorithm类。