преобразовать байт так: (b '\ xe4 \ x06- \ x95 \ xf5! P4') в двоичную строку нулей и единиц в Python - PullRequest
0 голосов
/ 26 апреля 2019

хорошо, у меня есть назначение для реализации режимов работы алгоритма DES в режиме CBC: я застрял в точке, где выходные данные функции шифрования дают байты, подобные этому: b '\ xe4 \ x06- \ x95 \ xf5! P4' (я использую библиотеку DES из Crypto.Cipher)

Я не знаю, что это за представление или как преобразовать его в двоичную строку из нулей и единиц, чтобы переписать ее со вторым простым текстом.

любая помощь будет высоко ценится

iv = random_iv()


des = DES.new(key)

plaintext1=""
#convert it into binary
plaintext1=bin(int.from_bytes(arr[0].encode(), 'big'))[2:]

y = fn.xor(plaintext1 ,iv)
y1='0'+'b'+y

y= int(y1, 2)
#y is the string output of xoring plaintext1 with the IV 
y= y.to_bytes((y.bit_length() + 7) // 8, 'big').decode()   

encrypted_blocks=[]

# arr is the array of the original blocks of the msg.
for i in range (1, len(arr)):
    c = des.encrypt(y)
    print(c)
    encrypted_blocks.append(c)
    ### stuck here ### 
    #### don't know how to work with c in that format ######

Ответы [ 2 ]

1 голос
/ 27 апреля 2019

Вы приняли ответ, но, возможно, вы не понимаете, что байтовые строки могут быть XORed как есть? Нет необходимости для преобразования в двоичный файл. Пример:

>>> msg = b'Mark'
>>> key = b'\x01\x02\x03\x04'
>>> enc = bytes([a^b for a,b in zip(msg,key)]) # xor each byte with key byte
>>> enc
b'Lcqo'
>>> dec = bytes([a^b for a,b in zip(enc,key)]) # xor again to decrypt
>>> dec
b'Mark'
0 голосов
/ 26 апреля 2019

привет @nehal, вы можете преобразовать ваши байты в двоичный файл следующим способом

# let b is your bytes
b = b'\xe4\x06-\x95\xf5!P4'

# first convert it to hex
bHex = b.hex()

# convert it to integet
bInt = int(bHex, 16)

# finaly convert it to binary
bBin = "{:08b}".format(bInt)

print(bBin) #1110010000000110001011011001010111110101001000010101000000110100

ИЛИ ПРОСТО

b = b'\xe4\x06-\x95\xf5!P4'
bBin = "{:08b}".format( int( b.hex(), 16 ) )
print(bBin) #1110010000000110001011011001010111110101001000010101000000110100
...