def encrypt_text_and_something_else(text, unkwn): #takes text as a bytearray and unkwn as text encoded in base64 #and encrypts them with aes ecb mode atext = text + bytes(b64_to_bytes(unkwn)) ctext = encrypt_ecb(atext, rand_key) return ctext
import random def test_bytes_xor(n=1000): for i in range(0, n): x = random.randint(0, 2**128) y = random.randint(0, 2**128) bx = x.to_bytes(16, 'big') by = y.to_bytes(16, 'big') if (int.from_bytes(bytes_xor(bx, by), 'big') != (y ^ x)): print("AAAAAH") print("x = " + str(x) + " y = " + str(y)) break print("Seems Okay") return if __name__ == "__main__": if (len(sys.argv) < 3): print("Need two arguments, the text file to encrypt and the key") sys.exit() fname = sys.argv[1] ctext = open(fname).read().replace("\n", '') key = sys.argv[2] if ((len(key) != 16) and (len(key) != 24) and (len(key) != 32)): print("the key must be length 16, 24, or 32") sys.exit() initv = bytes([0] * 16) dtext = decrypt_cbc(bytes(b64_to_bytes(ctext)), key.encode(), initv, 16) print(dtext)
b'V2FzIGNvbWluZyBpbnRvIGhpcyBmb3JjZTs=', b'SGUgbWlnaHQgaGF2ZSB3b24gZmFtZSBpbiB0aGUgZW5kLA==', b'U28gc2Vuc2l0aXZlIGhpcyBuYXR1cmUgc2VlbWVkLA==', b'U28gZGFyaW5nIGFuZCBzd2VldCBoaXMgdGhvdWdodC4=', b'VGhpcyBvdGhlciBtYW4gSSBoYWQgZHJlYW1lZA==', b'QSBkcnVua2VuLCB2YWluLWdsb3Jpb3VzIGxvdXQu', b'SGUgaGFkIGRvbmUgbW9zdCBiaXR0ZXIgd3Jvbmc=', b'VG8gc29tZSB3aG8gYXJlIG5lYXIgbXkgaGVhcnQs', b'WWV0IEkgbnVtYmVyIGhpbSBpbiB0aGUgc29uZzs=', b'SGUsIHRvbywgaGFzIHJlc2lnbmVkIGhpcyBwYXJ0', b'SW4gdGhlIGNhc3VhbCBjb21lZHk7', b'SGUsIHRvbywgaGFzIGJlZW4gY2hhbmdlZCBpbiBoaXMgdHVybiw=', b'VHJhbnNmb3JtZWQgdXR0ZXJseTo=', b'QSB0ZXJyaWJsZSBiZWF1dHkgaXMgYm9ybi4=' ] txts = [bytes(b64_to_bytes(t.decode())) for t in texts] ctexts = [encrypt_ctr(rankey, nonce, txt) for txt in txts] def candidates(ctexts): maxlen = max([len(l) for l in ctexts]) if maxlen <= 0: return [] ctxts_blk1 = [a[:16] for a in ctexts] cblk1 = [0] * 16 s = [] for i in range(0, 16): ct = [] for j in range(0, 256): counts = [j ^ t[i] for t in ctxts_blk1 if len(t) > i]
boole = True except: print("Exception Exception!!") """ back = openssl.backend cipher = Cipher(algorithms.AES(key), modes.ECB(), back) decryptor = cipher.decryptor() return decryptor.update(padded_text) + decryptor.finalize() def encrypt(text, key): padder = padding.PKCS7(128).padder() text = padder.update(text) + padder.finalize() #print(text) back = openssl.backend cipher = Cipher(algorithms.AES(key), modes.ECB(), back) encryptor = cipher.encryptor() return encryptor.update(text) + encryptor.finalize() if (__name__ == '__main__'): if (len(sys.argv) < 3): print( "need two arguments, the file of the text to decrypt and the key") key = sys.argv[2] keyi = [ord(c) for c in key] keyb = bytes(keyi) fname = sys.argv[1] file0 = open(fname).read().replace("\n", '') print(decrypt(bytes(b64_to_bytes(file0)), keyb))
def b64_bytes(b64): return bytes(b64_to_bytes(b64))
import aes_ctr as ctr import random from brk_rxc import b64_to_bytes from functools import reduce key = int.to_bytes(random.randint(0,2**128-1), 16, 'big') nonce = int.to_bytes(random.randint(0,2**64-1), 8, 'big') file0 = open('25.txt', 'r') str0 = file0.read().replace('\n','') bytez0 = bytes(b64_to_bytes(str0)) ctext0 = ctr.encrypt_ctr(key, nonce, bytez0) def edit(ctext, key, offset, ntext, isbytes=False): #offset 0 means start of ctext, it is 0 indexed strtblk = int(offset/16) lstblk = int((offset+len(ntext)-1)/16) ptext = [] if isbytes: pass else: ntext = ntext.encode() for i in range(strtblk,lstblk+1): ptext.append(ctr.decrypt_ctr_n(key, nonce, i, ctext[16*i:min(len(ctext),16*(i+1))])) unmodded = reduce(lambda x,y:x+y, ptext) modded = unmodded[:offset%16] + ntext + unmodded[offset%16+len(ntext):] m_ctext = [] for i in range(strtblk,lstblk+1): m_ctext.append(ctr.encrypt_ctr_n(key, nonce, i, modded[16*(i-strtblk):min(len(modded),16*(i+1-strtblk))]))
return encrypt_ecb(text, key) def blist(ctext): return [i for i in ctext] def is_ecb(ctext): #turning ctext into a list of bytes because I coded score when I was using that type byte_list_ctext = blist(ctext) sco = score(byte_list_ctext) #print("The score is: "+str(sco)) if sco < 63: #print("I guess it is ECB!!!") return True else: #print("I guess it is CBC!!!") return False if __name__=="__main__": if(len(sys.argv) < 2): print("Ya gotta give me some text to encode yo, maybe kinda long, also it would need to have repeated phrases and patterns and whatnot.") sys.exit() text = sys.argv[1] if((len(sys.argv)>=3) and (sys.argv[2] == 'b64')): text = bytes(b64_to_bytes(text)) else: text = text.encode() for i in range(0,15): ctext = encryption_oracle(text) is_ecb(ctext)