Побитовые операции с длинными строками Hex и ascii с помощью Python

Я ищу способ выполнять побитовые операции (для криптографии, в основном xor) с шестнадцатеричными строками, которые могут быть длиннее, чем я хотел бы поместить в Long. В качестве примера у меня мог бы быть длинный шестнадцатеричный литерал, который я хочу искоренить с другими данными. Ниже приведен пример того, что я хочу сделать и как я это делаю сейчас, но я считаю, что в какой-то момент компьютер достигнет своего предела в том, что он может поместить в Long, так как я могу сделать это более надежно?

#assuming lengths of messages are correct and key length as well
old_hex = "top secret ascii message".encode('hex')
encoded = "09e1c5f70a65ac56e55ac519458e7e53f36" #a literal hex encoded string
key_hex = int(old_hex,16) ^ int(encoded,16) #this currently works because this fits in Long
new_hex = "my new message to send 2".encode('hex')
ans_hex = key_hex ^ int(new_hex,16)

print 'old message in hex: 0x'+old_hex
print 'found a key in hex: '+str(hex(key_hex))
print 'new message in hex: 0x'+new_hex
print 'new message encode: '+str(hex(ans_hex))

Итак, я хочу выполнить XOR для более длинных строк, которые здесь, и я боюсь, что они не поместятся в переменной Long, так как я могу обойти это? Должен ли я разбивать строку на более мелкие куски и выполнять каждую часть операции?


person hackartist    schedule 30.06.2012    source источник
comment
как долго у тебя струны? python ints продолжаются вечно. 2 ** 4096 вписывается в int   -  person calccrypto    schedule 01.07.2012
comment
Итак, если я вставлю абзац или целую страницу шестнадцатеричного значения, вы не думаете, что он достигнет предела при преобразовании в int?   -  person hackartist    schedule 01.07.2012
comment
это не должно. если вы делаете простой шифр xor, просто xor каждого символа индивидуально, если каким-то сумасшедшим методом вы переполняете python int. в противном случае используйте целые числа, как определено в стандарте алгоритма, который вы реализуете.   -  person calccrypto    schedule 01.07.2012


Ответы (1)


Я считаю, что в какой-то момент компьютер достигнет своего предела в том, что он может поместить в Long

Да, предел есть, но он огромен. В конце концов у вас закончится память, но то же самое может случиться и со строками. Целочисленный тип Python будет работать нормально.

person Mark Byers    schedule 30.06.2012
comment
Хорошо, спасибо, я подумал, что это будет похоже на то, как это делал C, но я думаю, что нет. Хорошо знать. - person hackartist; 01.07.2012