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)
예제 #3
0
    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))
예제 #5
0
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))]))
예제 #7
0
        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)