给定一个字符串,我怎么知道它是否需要解码

Guy*_*Guy 1 python base64

我正在使用python的base64模块,我得到一个可以编码或不编码的字符串.我想做的事情如下:

if isEncoded(s):
   output = base64.decodestring(s)
else:
   output = s
Run Code Online (Sandbox Code Playgroud)

想法?

Ale*_*lli 10

一般来说,这是不可能的; 例如,如果您收到字符串'MjMj',您怎么可能知道它是否已经解码并且需要按原样使用,还是解码为'23#'?

  • 确切地说:你只能测试没有禁止的字符,并且长度可以被4整除. (2认同)
  • 值得注意的是,因为它是不可能的,尝试在必要时解码它可以用作XSS和类似攻击的攻击媒介,通过制作看似编码的数据,系统在解码后会做坏事. (2认同)

Ste*_*202 5

你可以尝试一下,看看会发生什么:

import base64

def decode_if_necessary(s):
    try:
         return base64.decodestring(s)
    except:
         return s
Run Code Online (Sandbox Code Playgroud)

但是你必须问自己:如果原始消息实际上是一个语法上有效的base64字符串,但不是一个意思呢?然后"解码"它将成功,但结果不是所需的输出.所以我不得不问:这真的是你想要的吗?

编辑:注意decodestring不推荐使用.


bri*_*gge 5

您可以检查字符串是否可以使用base64编码。通常,该功能可以预测75%以上的精度,即数据已编码。

def isBase64(s):
    return (len(s) % 4 == 0) and re.match('^[A-Za-z0-9+/]+[=]{0,2}$', s)
Run Code Online (Sandbox Code Playgroud)