Operaciones bit a bit en cadenas hexadecimales y ascii largas con Python
Frecuentes
Visto 1,499 equipos
0
Estoy buscando una manera de poder hacer operaciones bit a bit (para criptografía, en su mayoría xor) en cadenas hexadecimales que posiblemente podrían ser más largas de lo que me gustaría encajar en un Long. Como ejemplo, podría tener un literal hexadecimal largo que quiero xor con otros datos. A continuación se muestra un ejemplo de lo que quiero hacer y cómo lo estoy haciendo ahora, pero creo que en algún límite la computadora alcanzará su límite en lo que puede poner en Long, entonces, ¿cómo puedo hacer esto de manera más sólida?
#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))
Entonces, querré hacer XOR en cadenas más largas que esta y me temo que no caben en una variable larga, entonces, ¿cómo puedo solucionar esto? ¿Tengo que dividir la cuerda en trozos más pequeños y hacer cada parte a través de la operación?
1 Respuestas
5
Creo que en algún límite la computadora alcanzará su límite en lo que puede poner en Long
Sí, hay un límite, pero ese límite es enorme. Eventualmente, se quedará sin memoria, pero lo mismo podría suceder con las cadenas. El tipo entero de Python funcionará bien.
Respondido el 30 de junio de 12 a las 23:06
ok, gracias, pensé que sería similar a cómo C hizo las cosas, pero supongo que no. Bueno saber. - hackartista
No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas python hex bit-manipulation xor or haz tu propia pregunta.
¿Qué tan largas son tus cuerdas? python ints continúan para siempre.
2 ** 4096
encaja en un int - calccryptoEntonces, si pego un párrafo o una página completa de hexadecimal, ¿no crees que alcanzará el límite al convertirlo a un int? - hackartist
no debería si está haciendo un cifrado xor simple, simplemente xor cada carácter individualmente, si por algún método loco, desborda un int de python. de lo contrario, use ints como se define en el estándar del algoritmo que está implementando - calccrypto