当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《给定一个字符串,我怎么知道它是否需要解码》经验,为你挑选了3个好方法。

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

if isEncoded(s):
   output = base64.decodestring(s)
else:
   output = s

想法?



1> Alex Martell..:

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


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

2> Stephan202..:

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

import base64

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

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

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



3> brianegge..:

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

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

推荐阅读
ar_wen2402851455
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有