繁体   English   中英

PHP中大字符串的按位运算

[英]Bitwise Operations On Large Strings In PHP

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

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

我知道其中一些实现这些功能的工作只需要2个32位整数。 但是,如何进行shiftrotate

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

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

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

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

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

显然,没有办法在给定环境的情况下使用表示整数的本机数据结构,因此您必须在顶部使用数据结构。 这当然意味着您将无法应用给定的示例... 0xFFFFFFFF >> 4但您可以使用mystruct(0xFFFFFFFF)>> 4(mystruct是您定义的数据结构)。

如果这听起来像计划让我知道,也许我可以帮助您解决剩下的问题。

你可以使用bcmath 它已经证明自己非常好,并且自4.0.4起与PHP一起使用

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM