HOWTO · Python

如何在 Python 中對兩個字符串執行按位異或

掌握在 Python 中對字符串執行按位 XOR 操作的藝術,參考我們的全面指南。通過清晰且註釋良好的代碼示例,了解 Python 的 XOR 運算符、ord() 和 binascii 函數。

本頁內容

歡迎來到我們的綜合指南,介紹如何在 Python 中對兩個字符串執行按位異或(XOR)。這篇文章旨在幫助初學者和經驗豐富的程序員更好地理解如何使用 XOR 操作在 Python 中處理二進制數據。按位操作是低層次計算的重要方面,並且常用於數據科學、密碼學和網絡工程等領域。在閱讀完這篇文章後,您將能夠像專家一樣在 Python 中對字符串執行 XOR 操作!

方法 1:使用 XOR(^)運算符和 ord() 函數:

Python 提供了一個內置運算符’^‘用於按位 XOR 操作。然而,這個運算符只能用於整數,而不是字符串。因此,我們需要使用 ord()函數將字符串轉換為它們的 ASCII 值。然後在這些 ASCII 值上執行 XOR 操作。

def xor_strings(s1, s2):
    # Ensure s1 and s2 have the same length
    if len(s1) != len(s2):
        raise ValueError("Both strings must have the same length")

    # Convert strings to ASCII values and perform XOR
    result = [chr(ord(a) ^ ord(b)) for a, b in zip(s1, s2)]
    return ''.join(result)

print(xor_strings("Hello", "World"))  # Outputs: 

輸出:

'\x1f\x0e\x1c\x0e\x06'

在上述代碼中,zip()函數用於同時迭代兩個字符串。然後使用 chr()函數將 XOR 結果轉換回字符。

方法 2:使用 binascii 和 int()函數:

binascii 模塊提供了在二進制與各種 ASCII 編碼的二進制表示之間轉換的方法。在這裡,我們利用 binascii.hexlify()和 binascii.unhexlify()函數以及 int()函數來執行 XOR 操作。

import binascii

def xor_strings(s1, s2):
    # Convert strings to hexadecimal
    hex1 = binascii.hexlify(s1.encode())
    hex2 = binascii.hexlify(s2.encode())

    # Perform XOR on hexadecimal values and convert back to string
    result = int(hex1, 16) ^ int(hex2, 16)
    return binascii.unhexlify('{:x}'.format(result)).decode()

print(xor_strings("Hello", "World"))

輸出:

'\x1f\x0e\x1c\x0e\x06'

在這段代碼中,首先使用 binascii.hexlify()將字符串轉換為十六進制。然後對這些十六進制值執行 XOR 操作。結果使用 binascii.unhexlify()轉換回字符串。

總結:

在 Python 中對字符串執行按位操作,比如 XOR,起初可能看起來令人生畏。然而,通過對 Python 內置函數和按位運算符的清晰理解,這變得簡單明瞭。本文中提出的兩種方法為在 Python 中對兩個字符串執行按位異或提供了堅實的基礎。請記住,練習是掌握任何編程概念的關鍵。因此,繼續編碼吧!

常見問答:

  1. 在 Python 中,XOR 操作是什麼?

    • XOR 代表獨佔或。這是一種按位操作,當兩個位不同時返回 1,相同時返回 0。
  2. 我可以在 Python 中直接對字符串使用 XOR 運算符嗎?

    • 不可以,Python 中的 XOR 運算符只能用於整數值。因此,您需要將字符串轉換為其 ASCII 或十六進制等價物。
  3. 在 Python 中,ord()函數的用途是什麼?

    • Python 中的 ord()函數返回一個整數,表示 Unicode 字符。
  4. 在 Python 中,binascii 模塊是什麼?

    • binascii 模塊包含了多種方法,用於在二進制與各種 ASCII 編碼的二進制表示之間進行轉換。