php - PHP 中大字符串的按位运算

标签 php 32bit-64bit bitwise-operators

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

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

我知道其中一些函数的实现是通过 2 个 32 位整数轻松完成的。但是,这对于 shiftrotate 有何作用?

我想做的是以二进制形式存储字符串(作为 01010 的字符串)。这样,所有按位运算将完全独立于体系结构。但这可能会导致性能大幅下降,因为它们在标准(以及库的其他部分)中使用得非常频繁。

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

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

最佳答案

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

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

关于php - PHP 中大字符串的按位运算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5537839/

相关文章:

php - 网站未从数据库中提取用户数据进行登录

python - Py2exe - 为 32 位和 64 位编译 exe

c - 如何在 C 中使用 mod 2 加法制作 XOR?

java - 存储用户输入的按位运算符的数据类型是什么

javascript - 从选择菜单更改更新 HTTP GET 请求

php - 如何从 CakePHP 3.x 中的关联表中接收数据作为对象(当前作为数组接收)

php - 检查 PHP 引荐来源网址

ios - 去除 64 位 SDK 的警告

assembly - ARM 汇编 SOS 中的 64 位除法

objective-c - 字段打包字节返回意外结果