2015-02-10 4 views
5

में गिनती हेक्स में गिनने और परिणाम को एक बड़ी हेक्स स्ट्रिंग के अंत में जोड़ने का एक अच्छा तरीका क्या है? मैं एक पैडिंग ऑरैकल हमले में इस्तेमाल होने वाली स्ट्रिंग को प्रारूपित करने की कोशिश कर रहा हूं। एक HTTP अनुरोध बनाने के लिए तारों को एकसाथ संयोजित किया जाएगा।पायथन - हेक्स

मेरे पास दो 32 वर्ण हेक्स स्ट्रिंग हैं। 'जी' एक अनुमान है, पैड पैडिंग ऑरैकल है। मूल रूप से मैं है क्या करने की जरूरत जी के अंतिम बाइट 0xff.The कोड मैं अब तक के लिए 0x00 से हेक्स में गिनती है:

split = [value[x:x+32] for x in range (0, len(value), 32)] #Split the CT into 16 byte chunks 
IV = unhexlify(split[0]) 
c0 = unhexlify(split[1]) 
c1 = unhexlify(split[2]) 
c2 = unhexlify(split[3]) 


g = unhexlify("00000000000000000000000000000000") 
pad = unhexlify("00000000000000000000000000000001") 

pad_xor_guess = xorb(g, pad) 
c1_prime = xorb(pad_xor_guess, c1) 

attack = str(hexlify(c1_prime + c2).decode()) 

'हमले' क्वेरी विधि है कि संलग्न कर देगा में पारित हो जाएगा वेब पते पर हमला स्ट्रिंग। अब जिस हिस्से पर मैं फंस गया हूं वह यह है कि मुझे सादे पाठ के एक बाइट का अनुमान लगाने के लिए मूल रूप से 256 HTTP अनुरोध भेजना होगा। 00 से एफएफ तक "गिनती" करने के लिए मैं लूप के लिए कैसे उपयोग कर सकता हूं, जिसके परिणामस्वरूप जी को इस तरह से जोड़ना है कि इसे पैड और चुने गए सिफरटेक्स्ट ब्लॉक के साथ xor'd किया जा सकता है? अब तक मैं इस रास्ते से नीचे जा रहा हूं, लेकिन मैं इस काम को हेक्स स्ट्रिंग के साथ कैसे बना सकता हूं।

for i in range(0, 20): 
    #g = bytes([i]) 
    print(bytes([i]),end=' ') 
    #print(g, end=' ') 
+4

' मैं रेंज में (255): हेक्स (i) ' – user2097159

उत्तर

4

दिया पूर्णांक मान के लिए, हेक्स समारोह आप हेक्स स्ट्रिंग 0x से पहले दे देंगे, तो हेक्स (i) [2:] क्या आप देता है हेक्स संख्या ही है, zfill

for i in xrange(256): 
    print hex(i)[2:].zfill(2) 

तुम भी यह सब टोपियां बनाने पर विचार करने के लिए, के बाद से कुछ पारसर्स हेक्स पर भरोसा करते हैं बड़े अक्षरों, रों में लिखा जा रहा चाहते हो सकता है सुनिश्चित करें कि आप एकल अंक संख्या के लिए दो अंक प्राप्त कर देगा ओ उदाहरण होगा:

for i in xrange(256): 
    print hex(i)[2:].zfill(2).upper() 

और अगर आप अभी पूरी स्ट्रिंग की जरूरत है, तो आप आप एक ही बार में स्ट्रिंग बना सकते हैं, एक-एक करके उन्हें एक संलग्न करने के लिए की जरूरत नहीं है:

hex_str = "".join([hex(i)[2:].zfill(2).upper() for i in xrange(256)]) 
3

मुझे लगता है कि आप की तरह कुछ मतलब है:

>>> for i in range(256): 
    print "{:02x}".format(i) # or X for uppercase 


00 
01 
02 
... 
fd 
fe 
ff 
संबंधित मुद्दे