在VBA.NET中编写了以下函数,我正在尝试将其转换为PHP。我主要是一名PHP开发人员,而且我对VB的知识也很少。
<%
Public Shared Function ComputeHash(ByVal Key As String) As String
Dim objSHA1 As New SHA1CryptoServiceProvider
objSHA1.ComputeHash(System.Text.Encoding.UTF8.GetBytes(Key.ToCharArray))
Dim buffer() As Byte = objSHA1.Hash
Dim HashValue As String = System.Convert.ToBase64String(buffer)
Return HashValue
End Function
%>
我试过搜索手册并找到了一些指导。 到目前为止,我自己已经转换为PHP了:
function compute_hash($string){
return base64_encode(sha1($string));
}
Hovewer它不会产生与VB的函数ComputeHash()
相同的结果。 Coud没有人告诉我我做错了什么?
两种语言的执行示例:
VBA.NET
string = "orange45877687459999SENTRYORD01154321"
ComputeHash(string) // Returns = WbwSWEBzPqgo9C4nZmGwHhd/FBQ=
PHP
$string = "orange45877687459999SENTRYORD01154321";
compute_hash(string) // Returns = NTliYzEyNTg0MDczM2VhODI4ZjQyZTI3NjY2MWIwMWUxNzdmMTQxNA== (but I need "WbwSWEBzPqgo9C4nZmGwHhd/FBQ=")
答案 0 :(得分:3)
您需要通过将TRUE参数传递给散列函数来指示PHP以字节而不是十六进制格式返回SHA1-hash:
function compute_hash($string){
return base64_encode(sha1($string, TRUE));
}