示例#1
0
def breakSingleByteXOR(byteStr):
    strings = []

    for key in range(256):
        strings.append(xor(byteStr, bytearray([key] * len(byteStr))))

    return max(strings, key=lambda s: s.count(' '.encode('utf-8')))
def decryptAES_ECB_CBC(ciphertext, key, iv):
    plaintext = bytearray(len(ciphertext))

    for n in range(0, len(ciphertext), AES.block_size):
        plaintext[n: n+AES.block_size] = xor(decryptAES_ECB(ciphertext[n: n+AES.block_size], key), iv)
        iv = ciphertext[n: n+AES.block_size]

    return plaintext
示例#3
0
def hammingDistance(string1, string2):
    xorString = ''.join(format(x, '08b') for x in xor(string1, string2))
    distance = 0

    for num in xorString:
        if num == "1":
            distance += 1

    return distance
def encryptAES_ECB_CBC(plaintext, key, iv):
    plaintext = addPKCS7Padding(plaintext, AES.block_size)
    ciphertext = bytearray(len(plaintext))

    for n in range(0, len(plaintext), AES.block_size):
        ciphertext[n: n+AES.block_size] = encryptAES_ECB(xor(plaintext[n: n+AES.block_size], iv), key)
        iv = ciphertext[n: n+AES.block_size]

    return ciphertext
示例#5
0
def breakSingleByteXOR(encryptedText):
    keys = []
    strings = []

    for key in range(256):
        keys.append(chr(key))
        strings.append(
            xor(encryptedText, bytearray([key] * len(encryptedText))))

    bestString = max(strings, key=lambda s: s.count(' '.encode('utf-8')))

    for i in range(len(strings)):
        if bestString == strings[i]:
            return keys[i]
def repeatingKeyXOR(text, key):
    assert len(text) >= len(key)

    if not len(text) % len(key):
        return xor(text, key * (len(text) / len(key)))
    else:
        count = 0
        encoded = bytearray()

        for char in range(len(text)):
            encoded += bytearray([text[char] ^ key[count]])

            if count == len(key) - 1:
                count = 0
            else:
                count += 1
        return encoded