Hướng dẫn how do you xor a string in python? - làm thế nào để bạn xor một chuỗi trong python?

Xin chào, hàm sau đang trả về kết quả của

def change_to_be_hex(s):
    return int(s,base=16)
    
def xor_two_str(str1,str2):
    a = change_to_be_hex(str1)
    b = change_to_be_hex(str2)
    return hex(a ^ b)
print xor_two_str("12ef","abcd")
0 trả về một chuỗi.

def change_to_be_hex(s):
    return hex(int(s,base=16))

Bạn nên sử dụng toán tử

def change_to_be_hex(s):
    return int(s,base=16)
    
def xor_two_str(str1,str2):
    a = change_to_be_hex(str1)
    b = change_to_be_hex(str2)
    return hex(a ^ b)
print xor_two_str("12ef","abcd")
1 trên số nguyên.

def change_to_be_hex(s):
    return int(s,base=16)
    
def xor_two_str(str1,str2):
    a = change_to_be_hex(str1)
    b = change_to_be_hex(str2)
    return hex(a ^ b)
print xor_two_str("12ef","abcd")

Tôi không chắc đó là kết quả mà bạn đang tìm kiếm. Nếu bạn muốn xor hai chuỗi, điều đó có nghĩa là bạn muốn xor mỗi ký tự của một chuỗi với ký tự của chuỗi kia. Sau đó, bạn nên XOR

def change_to_be_hex(s):
    return int(s,base=16)
    
def xor_two_str(str1,str2):
    a = change_to_be_hex(str1)
    b = change_to_be_hex(str2)
    return hex(a ^ b)
print xor_two_str("12ef","abcd")
2 giá trị của mỗi char hoặc str1 với giá trị
def change_to_be_hex(s):
    return int(s,base=16)
    
def xor_two_str(str1,str2):
    a = change_to_be_hex(str1)
    b = change_to_be_hex(str2)
    return hex(a ^ b)
print xor_two_str("12ef","abcd")
2 của mỗi char của str2.

def xor_two_str(a,b):
    xored = []
    for i in range(max(len(a), len(b))):
        xored_value = ord(a[i%len(a)]) ^ ord(b[i%len(b)])
        xored.append(hex(xored_value)[2:])
    return ''.join(xored)
    
print xor_two_str("12ef","abcd")

Hoặc trong một dòng:

def xor_two_str(a,b):
    return ''.join([hex(ord(a[i%len(a)]) ^ ord(b[i%(len(b))]))[2:] for i in range(max(len(a), len(b)))])

print xor_two_str("12ef","abcd")

Đoạn trích này chỉ cho bạn cách có thể chỉ có thể xor hai chuỗi byte python bằng cách sử dụng một hàm để tạo ra một chuỗi byte khác.

  • Giới thiệu nhanh về XOR?
  • Chuỗi xor
  • Byte xor
  • Vấn đề ban đầu của tôi

Trước đây thực hiện một thử thách CTF, tôi thấy mình cần phải xor hai chuỗi byte trong Python để tiết lộ một khóa từ văn bản gốc và dữ liệu 'mật mã' (trong trường hợp này bởi XOR).

Giới thiệu nhanh về XOR?

Chuỗi xor

Byte xorVấn đề ban đầu của tôiTrước đây thực hiện một thử thách CTF, tôi thấy mình cần phải xor hai chuỗi byte trong Python để tiết lộ một khóa từ văn bản gốc và dữ liệu 'mật mã' (trong trường hợp này bởi XOR).
1 1 0
1 0 1
0 1 1
0 0 0

XOR (hoặc "độc quyền hoặc") là một toán tử nhị phân như và và hoặc. Trong Python, Bitwise XOR được biểu diễn dưới dạng

def change_to_be_hex(s):
    return int(s,base=16)
    
def xor_two_str(str1,str2):
    a = change_to_be_hex(str1)
    b = change_to_be_hex(str2)
    return hex(a ^ b)
print xor_two_str("12ef","abcd")
1 như
def change_to_be_hex(s):
    return int(s,base=16)
    
def xor_two_str(str1,str2):
    a = change_to_be_hex(str1)
    b = change_to_be_hex(str2)
    return hex(a ^ b)
print xor_two_str("12ef","abcd")
5 là và
def change_to_be_hex(s):
    return int(s,base=16)
    
def xor_two_str(str1,str2):
    a = change_to_be_hex(str1)
    b = change_to_be_hex(str2)
    return hex(a ^ b)
print xor_two_str("12ef","abcd")
6 là hoặc. Đây là một "bảng sự thật" bằng cách sử dụng 1 và 0:

một

Hướng dẫn how do you xor a string in python? - làm thế nào để bạn xor một chuỗi trong python?

b

  • a ^ b
  • Bạn có thể thấy rằng kết quả của hoạt động bitwise trên hai bit sẽ là 1 nếu chúng khác nhau và 0 nếu chúng giống nhau.
  • Khi áp dụng toán tử này vào các giá trị dài hơn một bit, mỗi bit được so sánh với tương ứng của nó trong giá trị khác; Ví dụ:

Nó cũng phổ biến để thấy toán tử này được sử dụng trên các số được biểu thị bằng nhị phân, thập phân và hex:

Chuỗi xor

Byte xor

def sxor(s1,s2):    
    return ''.join(chr(ord(a) ^ ord(b)) for a,b in zip(s1,s2))

Vấn đề ban đầu của tôi

key = sxor('string 1', 'string 2')

Byte xor

Vấn đề ban đầu của tôi

def byte_xor(ba1, ba2):
    return bytes([_a ^ _b for _a, _b in zip(ba1, ba2)])

Trước đây thực hiện một thử thách CTF, tôi thấy mình cần phải xor hai chuỗi byte trong Python để tiết lộ một khóa từ văn bản gốc và dữ liệu 'mật mã' (trong trường hợp này bởi XOR).

key = byte_xor(b'string 1', b'string 2')

Vấn đề ban đầu của tôi

Trước đây thực hiện một thử thách CTF, tôi thấy mình cần phải xor hai chuỗi byte trong Python để tiết lộ một khóa từ văn bản gốc và dữ liệu 'mật mã' (trong trường hợp này bởi XOR).

XOR (hoặc "độc quyền hoặc") là một toán tử nhị phân như và và hoặc. Trong Python, Bitwise XOR được biểu diễn dưới dạng
def change_to_be_hex(s):
    return int(s,base=16)
    
def xor_two_str(str1,str2):
    a = change_to_be_hex(str1)
    b = change_to_be_hex(str2)
    return hex(a ^ b)
print xor_two_str("12ef","abcd")
1 như
def change_to_be_hex(s):
    return int(s,base=16)
    
def xor_two_str(str1,str2):
    a = change_to_be_hex(str1)
    b = change_to_be_hex(str2)
    return hex(a ^ b)
print xor_two_str("12ef","abcd")
5 là và
def change_to_be_hex(s):
    return int(s,base=16)
    
def xor_two_str(str1,str2):
    a = change_to_be_hex(str1)
    b = change_to_be_hex(str2)
    return hex(a ^ b)
print xor_two_str("12ef","abcd")
6 là hoặc. Đây là một "bảng sự thật" bằng cách sử dụng 1 và 0:
một
ba ^ b
Bạn có thể thấy rằng kết quả của hoạt động bitwise trên hai bit sẽ là 1 nếu chúng khác nhau và 0 nếu chúng giống nhau.Khi áp dụng toán tử này vào các giá trị dài hơn một bit, mỗi bit được so sánh với tương ứng của nó trong giá trị khác; Ví dụ:
Nó cũng phổ biến để thấy toán tử này được sử dụng trên các số được biểu thị bằng nhị phân, thập phân và hex:
def change_to_be_hex(s):
    return int(s,base=16)
    
def xor_two_str(str1,str2):
    a = change_to_be_hex(str1)
    b = change_to_be_hex(str2)
    return hex(a ^ b)
print xor_two_str("12ef","abcd")
7 = 1010
def change_to_be_hex(s):
    return int(s,base=16)
    
def xor_two_str(str1,str2):
    a = change_to_be_hex(str1)
    b = change_to_be_hex(str2)
    return hex(a ^ b)
print xor_two_str("12ef","abcd")
8 = 15 (0101 ^ 1010)
def change_to_be_hex(s):
    return int(s,base=16)
    
def xor_two_str(str1,str2):
    a = change_to_be_hex(str1)
    b = change_to_be_hex(str2)
    return hex(a ^ b)
print xor_two_str("12ef","abcd")
9 = 0x8 (1111 ^ 0111)

Mặc dù vấn đề của tôi mà tôi đang cố gắng giải quyết là sử dụng chuỗi Byte Python, tôi vẫn có thể sử dụng các nguyên tắc tương tự ...

import base64

base64_ciphertext = 'bVkmcyU2L14RKiBjMiddVSY9YzgrVV40'
plaintext = 'The flag is hidden below'

def byte_xor(ba1, ba2):
    """ XOR two byte strings """
    return bytes([_a ^ _b for _a, _b in zip(ba1, ba2)])

# Decode the cipher-text to a byte string and make the plaintext a byte string
key = byte_xor(base64.b64decode(base64_ciphertext), plaintext.encode())

Tôi đã tìm thấy một câu trả lời trên StackOverflow cho thấy cách xor hai chuỗi để tạo thành một chuỗi kết quả:

import base64

base64_ciphertext = 'X10iNHk5fQ4HIGBxPnwPU3c='
key = '91CSCZN91CSCZN91CSCZN91C'

def bxor(ba1, ba2):
    """ XOR two byte strings """
    return bytes([_a ^ _b for _a, _b in zip(ba1, ba2)])

flag = bxor(base64.b64decode(base64_ciphertext), key.encode())

Sử dụng điều này bây giờ chúng ta có thể làm:

Làm thế nào để bạn xor một chuỗi?

Cách tiếp cận: Ý tưởng là lặp lại cả hai ký tự chuỗi theo ký tự và nếu ký tự không phù hợp thì thêm 1 1 1 làm ký tự trong chuỗi trả lời khác, hãy thêm vào 0 0 vào chuỗi trả lời để tạo chuỗi XOR.

Chúng ta có thể làm xor cho chuỗi không?

Hàm XOR trả về một chuỗi là XOR logic của các chuỗi đối số.Hàm này có chuỗi đối số đầu tiên, thực hiện thao tác XOR với chuỗi tiếp theo và sau đó tiếp tục thực hiện các thao tác XOR cho mỗi đối số liên tiếp bằng kết quả trước đó.. This function takes the first argument string, does an XOR operation with the next string, and then continues to do XOR operations for each successive argument using the previous result.

Làm thế nào để bạn tìm thấy giá trị XOR trong Python?

Để có được XOR logic của hai hoặc nhiều biến trong Python: chuyển đổi đầu vào thành booleans.Sử dụng toán tử XOR bitwise ( ^ hoặc toán tử. XOR)

Xor có nghĩa là gì trong Python?

XOR là một hoạt động nhị phân, nó là viết tắt của "độc quyền hoặc", nghĩa là bit kết quả đánh giá thành một nếu chỉ chính xác một trong các bit được đặt.Đây là bảng chức năng của nó: A |B |A ^ B-| --- | ------ 0 |0 |0 0 |1 |1 1 |0 |1 1 |1 |0. Hoạt động này được thực hiện giữa mỗi hai bit tương ứng của một số ...