so I pull random 256 bytes each from three different sources in hex value.
x = 0bb2b14357319415b4ca04dc297be2d9d54ff4f9292f5b8511cb0a53cf60b4be407ff95ec416f57141e2f30203a6c9e4453356dea928b166b693c122bca89fe3bb434e7c4ea7fc172151b6e9525e115843884a5d27eba06a42dc8411cdc3d9b9a8147780b95a49eeccf2d6af4307bf95b36c25539cadea67efbe4c9fe7e2db8199eba27f2c9543009589b28c36d89f6659b72f78ba3fd445c29234a167ffba7dc4c57e5635305454de3475000bd3012b1c21f18ec2b60d515fe2f82e9f602b1c6fe1aa7b55ffc98250ee24ff56f11e24f49b0a53e476c459ab8261a582dd338cebd0fec37f853e2011a9d3b0a581b3ff5d16387b250d201dc2774a5ed155f910
y = bc7bfe6577fddb25d706ca26d99694bae4b7a15349f96327324e34d25a07a60246e483e86bfc71d71007ad2b4fd88a4de4fde1295b6878cf24399fce786f747620980fb7750db8b0f28e1874d2bebfc81a6267864e8404bc42c29e752ce7b1716efd015ee4bb4928e70fac58cc79a7b9b5e86f38a11930b5be45a5cb4452b3d88b40d6beec3f1b6fcfae93be4868ab5f9ce33895485baef60a518aa63147ec42946163d250efc3f50f274241897249f6b6ce8a45e4ec22acd45b93ff62097f7c925d03c44874b934d8150add566c117402109c3ae1dce117a323dcd4429bc8bf83f1386976bc7c8179173ee6608df2833d6ba55178dcdacc144a730b296c8404
z = 2eefad7ef4d204329e23ba4e5ab76fc011e343579d6cc1eea5c3db33f5982c0481276ff077037ba63f67ad9ca202de91c7cad0f559a3b492dbb82252796c21f657265cc3bc58fcb57db809c25b17c4840feb41e29f056f83f121a0209469c38cf5cee0d6bbe8a081d61c01baed7bcd91c907c43c04b1a17364c7a7cc262f51db5897ec85109d62cb50e25636673cf464d4f0d26290e18a06903bfed7956ae1cfebf6b763ad83bc7288f542fcd7fd06a307bcb01c6539c1b241fee526f4c50b6f12af3f57714861b7428c7214f18715fe2a14720700537efd61e3978fad8a6f04eb03795da43ef0474756f793850c97dc841dfe6d6a6b3e4a25b48c7accbd3849
Then I xor each of them together using this xor function
def xor(X, Y):
return "".join('{:02x}'.format(ord(a) ^ ord(b)) for (a, b) in zip(X, Y))
and I got 1025 bytes in hex value. Actually, I read somewhere in here that if I want to get the same size of 256 bytes for combing hex value I need to XOR them, however, looks like this is not the case. I wonder if anyone has any advice on how to combine three hex value and keep it compressed in the same size? Thanks
x_xor_y_xor_z = 5201555004540206020055555d560300060353575355565556000e545c060658010156510705530a0600545f03510a0202035707035551015607060703025257000652525e0a505d555657555104530605015505075702500455050e5b585150510155575007565c545b04005509555050020a0a5a575157555b575e0e52520550520d0b0403555403505153045b530754030d54530e520d510057005357560005520e0a02560d5206525d565104540200000751015106045107060406085508575d575007060d55070d57030000575d065456540555545e5750070e03515b0c0006535b0453060b5852505d565154020703565055565a045103500006515c09015b51520504550357000a53055106565a53595c5b015a06070e5200580403500c5a0704015e0e0d565906040551520353530c030b55000705065251070203565a0055040156510406055656560753015403010303070401085b530104085454535551545e500c500606075502565452515250505f0b54030f540609050406000f54505551525456010d515201000b06510854500255020200005052005405005606085209020652000553550605040e00510a01525205010c005d06500b5a055d510201555d550a00505a5604060a010608500e575607065705005504015e5506000754520d0253050d5407565152075206035603520507560803565e0d0104
Your XOR function converts the characters (
0-F) to ASCII values withord(), where e.g.Ais 65. Then these numbers are XORed and create large values (higher than 16). These values are then converted back to hex. However, this hex value has two characters as large numbers are used, which means that your result is larger than the inputs.To solve this problem I would replace
ord()withint(x, 16). This function converts your characters to their "real" values (e.g.Ais 10). If these values are XORed you get a digit between 0 and 15, which can be converted to a single hex character.Following is the new code of the function:
With your
xandyvariables you get the following same size string:EDIT: As you have multiple values, you can also use a function that takes an arbitrary amount of arguments and XORs them like this: