调用哈希函数时出现InvalidCastException

时间:2017-03-16 08:07:38

标签: .net vb.net

我在现有代码(基本登录页面)中添加了一个哈希函数,期望返回一个String。这是功能:

Public Shared Function sha256_hash(value As [String]) As [String]
    Using hash As SHA256 = SHA256Managed.Create()
         Return [String].Join("", hash.ComputeHash(Encoding.UTF8.GetBytes(value)).[Select](Function(item) item.ToString("x2")))
    End Using
End Function

当我尝试登录时,我得到以下内容:

  

InvalidCastException:无法转换类型' WhereSelectArrayIterator`2 [System.Byte,System.String]'输入' System.String []'。

我尝试寻找解决方案,但一无所获。我对vb.net没有经验,所以非常感谢帮助。

编辑: 此函数似乎在localhost中正常工作,但是当发布到Web服务器时它崩溃了。这可能是一个框架问题吗?

1 个答案:

答案 0 :(得分:2)

我可以使用.NET 3.5重现您的情况,正如Damien_The_Unbeliever所说,它不包含String.Join<T>(string,IEnumerable<T>)String.Join期待一个StringSelect数组确实返回IEnumerable(Of T)

话虽如此,您需要通过以下

更改您的代码
Public Shared Function sha256_hash(value As [String]) As [String]
     Using hash As SHA256 = SHA256Managed.Create()
        Return [String].Join("", hash.ComputeHash(Encoding.UTF8.GetBytes(value)).[Select](Function(item) item.ToString("x2")).ToArray())
    End Using
End Function

要使它在.NET 2.0中工作,你需要删除自{3.}}语句,因为它是在.NET 3.5中引入的,然后你可以简单地做一个foreach而不是SelectSelect返回的数组上,如下所示。

.ComputeHash

希望这有帮助