PHP中大字符串的按位运算

irc*_*ell 13 php bitwise-operators 32bit-64bit

这是我的问题.出于兼容性原因,我目前正在尝试在PHP中实现一些加密标准.我现在正在研究的是SHA256和SHA512.它们都是相当直接的标准,我对此没有任何问题.

但是,SHA512需要对64位整数进行逐位运算.由于PHP只能有32位整数(使用编译),这让我有一个问题.如何实现必要的按位函数(模数,移位,旋转,添加,xor和/或等),以便我保持兼容性和合理的性能水平......

我知道其中一些实现这些功能的工作只需要2个32位整数.然而,如何会为这项工作shiftrotate

我想到的是以二进制形式存储字符串(作为字符串01010).这样,所有按位操作都将完全独立于架构.但这可能会导致大量的性能下降,因为它们在标准中(以及在库的其他部分中)经常使用.

因此我的问题是:如何在PHP的32位编译中轻松地允许至少64位字符串操作,同时仍然保持每个步骤的性能合理水平......?

哦,我的目标是可移植性,所以没有扩展.我会考虑的其他图书馆,但它们必须是便携式的......

Eve*_*ert 3

将值存储在字符串中确实是正确的方法。

但不是存储 1 和 0,而是在每个字节中存储 8 位。从字符串中提取部分整数仍然很容易。您确实需要手动执行所有操作,例如移动。