这是我的问题。出于兼容性原因,我目前正在尝试在 PHP 中实现一些加密标准。我现在正在研究的是SHA256和SHA512。它们都是相当简单的标准,我对此没有意见。
但是,SHA512 需要对 64 位整数进行按位运算。由于 PHP 只能有 32 位整数(通过编译),这给我带来了一个问题。如何实现必要的按位函数(模、移位、旋转、加、异或、和、或等),以便保持兼容性和合理的性能水平...
我知道其中一些函数的实现是通过 2 个 32 位整数轻松完成的。但是,这对于 shift
和 rotate
有何作用?
我想做的是以二进制形式存储字符串(作为 01010
的字符串)。这样,所有按位运算将完全独立于体系结构。但这可能会导致性能大幅下降,因为它们在标准(以及库的其他部分)中使用得非常频繁。
所以我的问题是:如何在 PHP 的 32 位编译中轻松允许至少 64 位字符串操作,同时仍然保持每个步骤的合理性能水平......?
哦,我的目标是可移植性,所以没有扩展。我会考虑其他库,但它们必须是可移植的......
最佳答案
将值存储在字符串中确实是正确的方法。
但不是存储 1 和 0,而是在每个字节中存储 8 位。从字符串中提取部分整数仍然很容易。您确实需要手动执行移动等所有操作。
关于php - PHP 中大字符串的按位运算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5537839/