2017-04-14 120 views
0

在VBA.NET中我尝试将其转换为PHP。我主要是一名PHP开发人员,在VB中我几乎没有什么知识。在将VBA.NET函数转换为PHP时出现问题

<% 

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()。有人告诉我做错了什么?执行对两种语言的

例子:

VBA.NET

string = "orange45877687459999SENTRYORD01154321" 

ComputeHash(string) // Returns = WbwSWEBzPqgo9C4nZmGwHhd/FBQ= 

PHP

$string = "orange45877687459999SENTRYORD01154321"; 

compute_hash(string) // Returns = NTliYzEyNTg0MDczM2VhODI4ZjQyZTI3NjY2MWIwMWUxNzdmMTQxNA== (but I need "WbwSWEBzPqgo9C4nZmGwHhd/FBQ=") 
+0

你的目标是什么?你想在sha1中返回一个散列? –

+0

@MASIDDIQUI不,实际上并不那么简单。不只是哈希本身。我正在寻找在PHP中使用'ComputeHash()'的确切平等点 – Yang

+0

您能发布一些您接收到的示例输入和输出吗? –

回答

2

您需要指示PHP以字节为单位,而不是在十六进制返回SHA1哈希格式,通过将TRUE参数传递给哈希函数:

function compute_hash($string){ 
    return base64_encode(sha1($string, TRUE)); 
} 

PHP manual for SHA1