mirror of
https://github.com/gchq/CyberChef
synced 2026-01-02 08:33:18 +00:00
Merge pull request #1902 from FranciscoPombal/blowfish_ecr_iv
fix: Blowfish - ignore IV length in ECB mode
This commit is contained in:
@@ -1579,19 +1579,31 @@ DES uses a key length of 8 bytes (64 bits).`,
|
||||
from Crypto.Cipher import Blowfish
|
||||
import binascii
|
||||
|
||||
input_data = b"The quick brown fox jumps over the lazy dog."
|
||||
# Blowfish cipher parameters - key, mode, iv, segment_size, nonce
|
||||
key = binascii.unhexlify("0011223344556677")
|
||||
iv = binascii.unhexlify("0000000000000000")
|
||||
mode = Blowfish.MODE_CBC
|
||||
kwargs = {}
|
||||
iv = binascii.unhexlify("ffeeddccbbaa9988")
|
||||
if mode in [Blowfish.MODE_CBC, Blowfish.MODE_CFB, Blowfish.MODE_OFB]:
|
||||
kwargs = {"iv": iv}
|
||||
if mode == Blowfish.MODE_CFB:
|
||||
kwargs["segment_size"] = 64
|
||||
if mode == Blowfish.MODE_CTR:
|
||||
nonce = binascii.unhexlify("0000000000000000")
|
||||
nonce = nonce[:7]
|
||||
kwargs["nonce"] = nonce
|
||||
|
||||
cipher = Blowfish.new(key, mode, **kwargs)
|
||||
|
||||
# Input data and padding
|
||||
input_data = b"The quick brown fox jumps over the lazy dog."
|
||||
if mode == Blowfish.MODE_ECB or mode == Blowfish.MODE_CBC:
|
||||
padding_len = 8-(len(input_data) & 7)
|
||||
for i in range(padding_len):
|
||||
input_data += bytes([padding_len])
|
||||
|
||||
cipher = Blowfish.new(key, mode) # set iv, nonce, segment_size etc. here
|
||||
# Encrypted text
|
||||
cipher_text = cipher.encrypt(input_data)
|
||||
|
||||
cipher_text = binascii.hexlify(cipher_text).decode("UTF-8")
|
||||
|
||||
print("Encrypted: {}".format(cipher_text))
|
||||
|
||||
Reference in New Issue
Block a user