2009-10-07 75 views

回答

10

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

+2

:你只能测试没有禁止的字符,并且长度可以被四整除。 – giorgian 2009-10-07 16:09:44

+2

还值得注意的是,因为它是不可能的,所以试图在“必要时”对它进行解码可以被用作XSS和类似攻击的攻击媒介,通过编制看起来编码的数据来解决你的系统在解码之后做坏事。 – rmeador 2009-10-07 16:54:50

+1

编码和解码字符串的非常不错的选择,那里。 – 2009-10-07 19:21:13

5

你可能只是尝试一下,看看会发生什么:

import base64 

def decode_if_necessary(s): 
    try: 
     return base64.decodestring(s) 
    except: 
     return s 

但是你要问自己:如果什么原始消息实际上是一个语法上有效的base64字符串,但并不意味着是一个?然后“解码”它会成功,但结果不是要求的输出。所以我不得不问:这是真的你想要什么?

编辑:请注意,decodestring已弃用。

+0

你是说如果s没有被解码,decodestring()会引发一个异常? – Guy 2009-10-07 16:05:51

+0

他的意思是你希望使用有效的base64编码的字符串的机会很渺茫,并且当你在一个无效的base64编码字符串上调用'decodestring'时,'decodestring'会产生一个异常。这看起来像一个合理,简单的方法。 +1 – 2009-10-07 16:08:07

+0

我真的尝试过类似的东西,当字符串没有被解码时,没有抛出异常,我得到了异常。 – Guy 2009-10-07 16:08:10

4

您可以检查字符串may be base64 encoded。一般来说,函数可以用75%以上的精度预测数据是否被编码。

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

这个功能对我来说几乎没用,避免。 – sleepycal 2014-02-13 22:19:36

相关问题