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 |