【问题标题】:Error when decrypt message from blowfish/base64解密来自河豚/base64 的消息时出错
【发布时间】:2018-09-07 12:51:00
【问题描述】:

我正在尝试从 mirc 解密一些由 FiSH 插件加密的消息。该插件使用河豚加密作为基于密钥的模式 ECB,但首先它将消息加密为 code64,然后使用河豚 ECB。问题是当我在从 base64 解码后尝试使用河豚解密消息时,总是会出现相同的错误。 "ECB模式下数据必须与块边界对齐"

des 加密的消息是:“Probando un mensaje cifrado”

from Crypto.Cipher import Blowfish
from Crypto.Util.Padding import pad, unpad
from os import urandom
import base64

key = b"passw0rd"
text =b"+OK Tnkrh0sIoWb1oS1FT.RQop/.JPXNc.lclFO/gueZ4/ZwN1H0"



decode64 = base64.b64decode(text)


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

msg = decrypt.decrypt(decode64)

print(msg)

site-packages\Crypto\Cipher\_mode_ecb.py", line 163, in decrypt
    raise ValueError("Data must be aligned to block boundary in ECB mode")
ValueError: Data must be aligned to block boundary in ECB mode

WITH NON-STANDARD TABLE:

custom_a = "./0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
standard_a = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'

DECODE_TRANS = str.maketrans(custom_a,standard_a)

key = b"passw0rd"
text ="Tnkrh0sIoWb1oS1FT.RQop/.JPXNc.lclFO/gueZ4/ZwN1H0"
decode64 = base64.b64decode(text.translate(DECODE_TRANS))
decrypt = Blowfish.new(key,Blowfish.MODE_ECB)

msg = decrypt.decrypt(decode64)

print(msg)

【问题讨论】:

  • 1.不要使用 Blowfish,它不被认为是安全的,使用 AES(高级加密标准),甚至 Blowfish 的创建者也使用 AES。 2. 不要在新作中使用ECB模式,尽快更新旧作,不安全,见ECB mode,向下滚动到企鹅。而是使用带有随机IV的CBC模式,只需在加密数据前加上IV用于解密即可,它不需要保密。
  • 我需要使用 Blowfish,因为这是人们在 irc 上使用的方法。我不能用别的。我需要在我的 python 脚本上实现来自 irc 的 Blowfish 插件。
  • 在那篇文章中我确实得到了解决方案stackoverflow.com/questions/10303306/…。谢谢大家。

标签: python python-3.x encryption blowfish


【解决方案1】:

我在这里看到了两个明显的问题。可能还有更多,但需要先处理这些。

  1. 在解密之前,您需要从消息中删除前缀"+OK "。它不是加密数据的一部分。

  2. FiSH 传输的数据不是标准的 Base64。它使用a nonstandard encoding table,您必须考虑到这一点。

【讨论】:

  • 我确实尝试过做一个非标准的解码表,但结果是一样的。 "ECB 模式下数据必须与块边界对齐"
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-02-29
  • 1970-01-01
  • 2014-04-30
  • 1970-01-01
  • 1970-01-01
  • 2012-04-02
  • 2012-01-27
相关资源
最近更新 更多