base64解碼之後是亂碼,是什麼原因?有什麼解決思路?

CN0kVy1p1JY= 這個字元串解碼之後,按照base64編碼表,解碼結果是亂碼。是不是還用了其他的加密方式,這種情況下通常的解碼思路是什麼?懇請各位大神支招。

2017年10月16日更新:

為一個安卓app的sqlite數據的一個值。如上圖所示。


base64經常是為了用可見文本傳輸不可見二進位數據的,這要看你編碼前的數據是神馬用途,不一定是可見文本。

你可以把解析出來的二進位內容用各種編碼方式解一下試試~


你應該要知道base64是byte[] &<-&> char[]的一種演算法,把binary數據存資料庫前base64一下是很常見的(蠢)操作。


我用Binary-Hexadecimal-Decimal-Base64 Converter 解碼

TEXT是Э$W-iФ–

HEX是08 dd 24 57 2d 69 d4 96

你要看看原本的內容是不是加密了,或者原本的內容是不是本來就是數據,只是進行了BASE加密。

我之前試過為了防止模塊在通信時遇到特定字元導致轉義,我也用過BASE對字元串和數據進行BASE64加密


import base64

s1 = b"CN0kVy1p1JY="
s2 = base64.b64decode(s1)
print(s2)
s3 = base64.b64decode(s2+b"==")
print(s3)

result...

b"x08xdd$W-ixd4x96"
b"Z"

按照雙重層加密來解碼……得到。。。

一個字母Z

可能你是不是搞錯了代碼邏輯,多加密了一層?

P.S

根據阿洛提醒,基本不存在二層加密的可能了,因為BASE64加密的結果應該是ASCII字元,如果出現非ASCII字元,說明已經解密到底了。

然後看解出來的是什麼?

嗯,你只能通過與源位元組對比,如果解密的結果與源位元組不相等,說明哪兒有問題了。

至於你的源位元組是什麼,只有你自己知道了。


可能你的原始數據本身就是一串不可見字元,你可以把輸出結果再編碼一下試試,看看與原始編碼是否一樣。

測試代碼:

api


Base64不只是用來編碼文本。。。


第二個看著像中文字元編碼誒,utf-8還是gbk忘了


也可能原本就是亂碼


那說明它原來就不是用Base64進行編碼的


推薦閱讀:

同樣都是銅線介質,為什麼 USB3就比2速度快了那麼多?
在C語言中如何指定字元串編碼方式?
莫扎特的《魔笛》是否像有些人講的那樣——泄漏了共濟會的秘密?

TAG:字元編碼 | 編碼 | SQLite3 | 密碼編碼學與網路安全 | base64 |