Помогите с решением задачи

sadk0

Новичок
Пользователь
Фев 17, 2022
4
1
3
Напишите функцию, которая принимает на вход две последовательности байт одинаковой длины и возвращает их побайтовый XOR
 

Vershitel_sudeb

Vershitel sudeb
Команда форума
Модератор
Мар 17, 2021
973
220
43
21
Москва
Например так:
Python:
def foo(b1, b2):
    new = []
    for a, b in zip(b1, b2):
        new.append(a ^ b)
    return bytes(new)

print(foo(b'hello', b'world'))
 
  • Мне нравится
Реакции: sadk0

regnor

Модератор
Команда форума
Модератор
Июл 7, 2020
2 672
478
83
Спасибо! Но я некорректно задачу озвучил, прошу прощения.
Целиком задача звучит так:
Напишите функцию, которая принимает на вход две последовательности байт одинаковой длины и возвращает их побайтовый XOR.
Ваша функция работает правильно, если приняв на вход hex-декодированные
1c0111001f010100061a024b53535009181c
и
686974207468652062756c6c277320657965
вернет hex-декодированное значение
746865206b696420646f6e277420706c6179
задача ваша ничем не отличается из задачи первого сообщения...
 
  • Мне нравится
Реакции: sadk0

Vershitel_sudeb

Vershitel sudeb
Команда форума
Модератор
Мар 17, 2021
973
220
43
21
Москва
Тогда так:
Python:
def foo(b1, b2):
    new = []
    for a, b in zip(bytes.fromhex(b1), bytes.fromhex(b2)):
        new.append(a ^ b)
    return bytes(new).hex()

k = foo('1c0111001f010100061a024b53535009181c',
        '686974207468652062756c6c277320657965')
print(k)
print(k == '746865206b696420646f6e277420706c6179')
 
  • Мне нравится
Реакции: sadk0

sadk0

Новичок
Пользователь
Фев 17, 2022
4
1
3
Например так:
Python:
def foo(b1, b2):
    new = []
    for a, b in zip(b1, b2):
        new.append(a ^ b)
    return bytes(new)

print(foo(b'hello', b'world'))
Спасибо! Но я некорректно задачу озвучил, прошу прощения.
Целиком задача звучит так:
Напишите функцию, которая принимает на вход две последовательности байт одинаковой длины и возвращает их побайтовый XOR.
Ваша функция работает правильно, если приняв на вход hex-декодированные
1c0111001f010100061a024b53535009181c
и
686974207468652062756c6c277320657965
вернет hex-декодированное значение
746865206b696420646f6e277420706c6179
 

sadk0

Новичок
Пользователь
Фев 17, 2022
4
1
3
задача ваша ничем не отличается из задачи первого сообщения.
Да, действительно. Спасибо еще раз!
 

sadk0

Новичок
Пользователь
Фев 17, 2022
4
1
3
Тогда так:
Python:
def foo(b1, b2):
    new = []
    for a, b in zip(bytes.fromhex(b1), bytes.fromhex(b2)):
        new.append(a ^ b)
    return bytes(new).hex()

k = foo('1c0111001f010100061a024b53535009181c',
        '686974207468652062756c6c277320657965')
print(k)
print(k == '746865206b696420646f6e277420706c6179')
Супер! Благодарю!
есть еще такой вариант:
a = '1c0111001f010100061a024b53535009181c'
b = '686974207468652062756c6c277320657965'
print(hex(int(a, 16) ^ int(b, 16))[2:])
 
  • Мне нравится
Реакции: Vershitel_sudeb

Форум IT Специалистов