2014-10-30 55 views
4

在我開始之前:是的,我已經在這裏和其他地方查看了關於此主題的其他問題和解答。可靠地檢查一個字符串是否以.net編碼的.net

我發現了一個示例字符串,即.Net將base64解碼,即使它實際上不是base64編碼。這裏是例子:

雷諾考特水64mcg /劑噴鼻劑

的.NET方法Convert.FromBase64String解碼這個字符串時,所以我IsBase64Encoded方法愉快地返回該字符串則不會拋出異常。有趣的是,如果我使用cygwin base64 -d命令使用此字符串作爲輸入,它會失敗,消息無效輸入

更有趣的是,我認爲屬於這個可執行文件的源代碼(http://libb64.sourceforge.net/)「解碼」了這個相同的字符串,其結果與我從.Net Convert.FromBase64String獲得的結果相同。我會繼續尋找希望在其他地方找到線索,但現在我很難過。

任何想法?

+0

見〔式中,箱子拋出異常(http://msdn.microsoft.com/en-us/library/system.convert.frombase64string(V = vs.110)的.aspx) 。你的字符串符合條件(意外)。 – Suzi 2014-10-30 02:18:50

+0

這就是問題所在,它沒有拋出異常 – MrBoffin 2014-10-30 02:22:28

+4

.NET版本忽略空白字符(特別是'','\ n','\ r'和'\ t'),這些字符無效。如果你使用'base64 -di',我相信你會得到相同的結果。沒有真正的辦法來檢查,不依賴於某種有害的。任何匹配[a-zA-Z0-9]的長度爲4的倍數的字符串都將有效解碼,但可能不會表示實際的base-64編碼數據。 – 2014-10-30 02:38:33

回答

0

有一個稍微好一點的解決方案,它也檢查輸入字符串的長度。

我建議你在開始時進行檢查。如果輸入爲空或空,則返回false

http://www.codeproject.com/Questions/177808/How-to-determine-if-a-string-is-Base-decoded-or

+0

不幸的是,這不是一個解決方案。問題是該字符串將base64解碼而不失敗。然而,在CodeProject頁面的底部還有一個答案,它使用正則表達式來查看它是否看起來像一個base64編碼文本。不可靠,但它可能是迄今爲止我所見過的最好主意。 – MrBoffin 2017-07-13 07:46:40

相關問題