PHP Conference Japan 2024

gmp_xor

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

gmp_xor位元運算 XOR

說明

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

計算兩個 GMP 數字的位元互斥或 (XOR)。

參數

num1

一個 GMP 物件、一個 整數,或是一個可以被解釋為數字的 字串,其邏輯如同將該字串用於 gmp_init() 函式並啟用自動基數偵測(亦即當 base 參數等於 0 時)。

num2(第二個運算數)

一個 GMP 物件、一個 整數,或是一個可以被解釋為數字的 字串,其邏輯如同將該字串用於 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 加密是一種終極加密演算法。它無法被破解。它被用於加密隱匿潛艇的指令。我不同意以下 "kid-sister" 的貼文。如果您使用龐大的金鑰(與加密訊息的長度相同),並且該金鑰是隨機的(例如錄製在 CD 上的太空雜訊),則加密訊息也是隨機的——在沒有金鑰的情況下無法解密。在這些條件下,XOR 是有史以來最強的加密演算法。
patm at pureconnection dot net
20 年前
XOR 加密只有在金鑰長度至少與明文相同且金鑰完全隨機的情況下才有效。rand() 並非完全隨機。
mikko at entris dot net
22 年前
邏輯 XOR 運算可用於加密資料。使用資源 A 作為您的原始文字,資源 B 作為金鑰。請確保使用足夠長的 key,以免金鑰循環。
greenone
16 年前
這是一個計算兩個任意長度(但長度相同)位元字串的 XOR 值的快速替代方法。

<?php
/**
* 任意長度位元字串的 XOR 運算
* 位元字串必須長度相同
*
* @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