def gen_token(userdata): global key iv = rndfile.read(16) crypt = AES.new(key, AES.MODE_CBC, iv) userdata = userdata.replace(b"=", b"") # OM NOM NOM userdata = userdata.replace(b";", b"") # NOM NOM NOM NOM data = b"comment1=cooking%20MCs;userdata=" + userdata + b";comment2=%20like%20a%20pound%20of%20bacon" return iv + crypt.encrypt(pad_pkcs7(data, 16))
def encrypt(self, data): data = pad_pkcs7(data, self.bsz) output = bytes() iv = self.iv for i in range(0, len(data), self.bsz): block = self.cph.encrypt( bytes([a ^ b for a, b in zip(data[i:i + self.bsz], iv)])) output += block iv = block return output
def encryption_oracle(data): rndfile = Random.new() mode = random.choice([AES.MODE_ECB, AES.MODE_CBC]) if mode == AES.MODE_ECB: print("Using ECB!") crypt = AES.new(rndfile.read(16), mode) else: print("Using CBC!") crypt = AES.new(rndfile.read(16), mode, rndfile.read(16)) plaintext = rndfile.read(random.randrange(5, 10)) + data + rndfile.read( random.randrange(5, 10)) return crypt.encrypt(pad_pkcs7(plaintext, 16))
def encryption_oracle(data): global key crypt = AES.new(key, AES.MODE_ECB) return crypt.encrypt(pad_pkcs7(data + magic, 16))
def encrypted_profile_for(email): global key crypt = AES.new(key, AES.MODE_ECB) return crypt.encrypt(pad_pkcs7(profile_for(email).encode("ascii"), 16))