2009-10-07 44 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

相關問題