php$rs,如何为PHP创建RSHash函数

对于Web应用程序,我需要PHP中的RSHash函数(RSHash => Robert Sedgewick的字符串散列算法)。如何为PHP创建RSHash函数

我确实在VB6中有一个实现,我现在必须在PHP中重建这个函数。我所拥有的是以下VB6码:

Private Function RSHash(ByVal Str As String) As Double

Dim b As Long

Dim a As Variant

Dim hash As Variant

Dim i As Long

b = 378551

a = 63689

For i = 1 To Len(Str)

hash = MultiLong(hash, a) + Asc(Mid(Str, i, 1))

a = MultiLong(a, b)

Next i

RSHash = hash

End Function

Private Function MultiLong(a As Variant, b As Variant) As Variant

Dim vDec As Variant

vDec = CDec(a)

vDec = CDec(a) * CDec(b)

vDec = vDec - CDec(Fix(vDec/(2^32))) * CDec((2^32))

MultiLong = vDec

End Function

我在PHP做了:

function RSHash($string) {

$a = 63689;

$b = 378551;

$hash = 0;

for ($i = 0, $x = strlen($string); $i < $x; $i++) {

$hash = multiLong($hash, $a) + (int) ord($string[$i]);

$a = multiLong($a, $b);

}

return $hash;

}

function multiLong($a, $b) {

$x = $a * $b;

$y = floor($a * $b/pow(2,32));

return $x - $y * pow(2,32);

}

但在PHP(5.2.17)的结果是不一样的VB6。我认为这是由于一些舍入错误。我还在函数“multilong”中测试了一些其他舍入函数,也不使用它。

在PHP中有什么实现RSHash算法(我发现一些在许多其他语言,但不是PHP)? 如果没有(也许这是不可能的),有没有人有关于如何处理这个问题的建议?

在此先感谢!

解决方案:我们创建了一个计算哈希值的VB.net控制台应用程序。这个exe是从PHP调用来获得正确的。 看来,这是不可能的这个哈希算法转换成PHP。

2014-03-13

mindhead

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值