PHP Conference Japan 2024

gmp_xor

(PHP 4 >= 4.0.4, PHP 5, PHP 7, PHP 8)

gmp_xor按位异或

描述

gmp_xor(GMP|int|string $num1, GMP|int|string $num2): GMP

计算两个 GMP 数的按位异或 (XOR)。

参数

num1

一个 GMP 对象、一个 int 或一个 string,可以解释为一个数字,遵循与在 gmp_init() 中使用字符串进行自动基数检测相同的逻辑(即当 base 等于 0 时)。

num2

一个 GMP 对象、一个 int 或一个 string,可以解释为一个数字,遵循与在 gmp_init() 中使用字符串进行自动基数检测相同的逻辑(即当 base 等于 0 时)。

返回值

一个 GMP 对象。

范例

示例 #1 gmp_xor() 示例

<?php
$xor1
= gmp_init("1101101110011101", 2);
$xor2 = gmp_init("0110011001011001", 2);

$xor3 = gmp_xor($xor1, $xor2);

echo
gmp_strval($xor3, 2) . "\n";
?>

以上示例将输出

1011110111000100

添加注释

用户贡献的笔记 5 个笔记

kimcbrowne at hotmail dot com
19 年前
为了使 XOR 加密不可破解,密钥必须完全随机且永远不会重复使用。如果第二次使用密钥,则可以破解它。这可以通过阅读 http://en.wikipedia.org/wiki/One-time_pad. 上的页面来确认。

虽然我不是密码学的专家,但我理解解密涉及识别模式,并且如果存在足够多的样本可供检查,则可以使用相同的密钥对使用 XOR 编码的代码进行解密。在加密和解密点为每次加密维护唯一的密钥以确保 100% 的不可破解性本身存在安全问题 - 密钥存储在哪里以及如何存储,以及如何将其传输到解密点?
bukaj at bukaj dot net
19 年前
XOR 加密是一种终极加密算法。它无法被破解。它用于加密隐形潜艇的命令。我不同意下面“小妹妹”的帖子。如果您使用庞大的密钥(与加密消息一样长)且密钥是随机的(记录在 CD 上的空间噪声),则加密消息也是随机的 - 在没有密钥的情况下无法解密。在这些条件下,XOR 是迄今为止已知的最強大的加密算法。
patm at pureconnection dot net
20 年前
只有当密钥至少与明文大小相同且密钥完全随机时,XOR 加密才有效。而且,rand() 并非完全随机。
mikko at entris dot net
22 年前
逻辑 XOR 可用于加密数据。使用资源 A 作为您的原始文本,使用资源 B 作为密钥。确保使用足够长的密钥,以便密钥不会循环。解密方式相同,将加密文本作为 res A 输入,将密钥作为 res B 输入。
greenone
16 年前
这是一个计算任意(但相同)长度的两个位串的异或值的快速替代方法。

<?php
/**
* 任意长度位串的异或运算
* 位串必须具有相同的长度
*
* @param string $o1
* @param string $o2
* @return string
*/
function bitxor($o1, $o2) {
$xorWidth = PHP_INT_SIZE*8;
$o1 = str_split($o1, $xorWidth);
$o2 = str_split($o2, $xorWidth);
$res = '';
$runs = count($o1);
for(
$i=0;$i<$runs;$i++)
$res .= decbin(bindec($o1[$i]) ^ bindec($o2[$i]));
return
$res;
}
?>
To Top