IRC Blowfish加密模式?(IRC blowfish encryption mode?)

2019-09-25 15:51发布

我一直在做一些测试这个工具: http://crypto.hurlant.com/demo/CryptoDemo.swf并一直试图以匹配Mirc的河豚+河豚获得的结果(从曾经被认为是fish.secure.us V1 0.30),。 我不能为我的生活查找模式下,它是用...没有匹配..有谁知道它采用什么模式?

Answer 1:

它只是使用ECB模式,但base64编码是在奇数的方式进行 - 的密文的32位的每个块独立地编码成6个BASE64字符。



Answer 2:

对于IRC河豚插件似乎使用MODE_ECB(电子码本),这可能是最安全的河豚算法。

对于加密,他们打破明文分成8字节的块(河豚ECB块大小)。 然后,他们分别加密每个8字节的块,并采取每个加密块的输出,并存储块,它代入式(2)的4字节长材,和base64encode每个长,它们填充到6个BASE64字符长度。

对于解密,这个过程是相反的,但因为它是有点混乱我还会描述。 采取密文字节12,各6字节表示作为一个长(“> L”)进行解码,以便你现在有8个字节,其中你然后传递给河豚解密算法中。

import struct, string
from Crypto.Cipher import Blowfish

def blow(key, plaintext):
    if not isinstance(plaintext, str):
        raise TypeError('Plaintext must be str')
    else:
        if len(plaintext) % 8 != 0:
            plaintext += "\0" * (8-(len(plaintext)%8))

        cipher = Blowfish.new(key, Blowfish.MODE_ECB)

        ciphertext = ''
        charset = list('./' + string.digits + string.ascii_lowercase + string.ascii_uppercase)
        for j in range(0,len(plaintext),8):
            block = cipher.encrypt(plaintext[j:j+8])
            (low, high) = struct.unpack('>LL', block)

            while high:
                ciphertext += charset[high%64]
                high //= 64
            if len(ciphertext) % 6 != 0:
                ciphertext += charset[0] * (6-len(ciphertext)%6)

            while low:
                ciphertext += charset[low%64]
                low //= 64
            if len(ciphertext) % 6 != 0:
                ciphertext += charset[0] * (6-len(ciphertext)%6)

        assert len(ciphertext) % 12 == 0
        return ciphertext

def unblow(key, ciphertext):
    if not isinstance(ciphertext, str):
        raise TypeError('Ciphertext must be str')
    else:
        assert len(ciphertext) % 12 == 0
        cipher = Blowfish.new(key, Blowfish.MODE_ECB)
        plaintext = bytearray()

        charset = list('./' + string.digits + string.ascii_lowercase + string.ascii_uppercase)
        for j in range(0,len(ciphertext),12):
            high = 0
            for k in range(6):
                high |= charset.index(ciphertext[j+k]) << (k*6)
            low = 0
            for k in range(6):
                low |= charset.index(ciphertext[j+k+6]) << (k*6)
            plaintext += cipher.decrypt(struct.pack('>LL', low, high))

        return plaintext.decode('utf8').rstrip("\0")


Answer 3:

IRC不支持任何方式进行加密,一切都被转移,除了如果您在使用SSL的纯文本。 河豚是将被翻译(上mIRC的)邮件的加密算法,或者你使用的任何客户端。

如果没有河豚信息将被发送到服务器:

PRIVMSG #Channel :YourMessage

随着河豚信息将被发送到服务器:

PRIVMSG #Channel :w8e09w8e09q8eqiwoqweqweqweqwueqwehwqheqywgBlowFishEncryption



文章来源: IRC blowfish encryption mode?