如果基不為10,則此字串不能包含減號

杜i教授發表於2024-05-31

今天專案中突然報這個錯誤,搜遍全網沒有發現同樣案例,特此記錄一下方便其他人遇到此類問題快速解決

 

此問題出現的原因是欄位中涉及了AES加密解密的操作,解密字串中出現了減號“-”,導致錯誤的產生,以下是程式碼示例:

英文報錯提示:String cannot contain a minus sign if the base is not 10 (方便個別同學搜尋)

1 Console.WriteLine(HexStringToByteArray("2024-01-01"));
2 byte[] HexStringToByteArray(string s)
3 {
4     s = s.Replace(" ", "");
5     byte[] buffer = new byte[s.Length / 2];
6     for (int i = 0; i < s.Length; i += 2)
7         buffer[i / 2] = (byte)Convert.ToByte(s.Substring(i, 2), 16);
8     return buffer;
9 }

因為用的是hex加密解密方式,所以s應該是一個不包含特殊字元的字串。下面引用 瞭解常用的加密演算法 - 知乎 (zhihu.com)

Hex和Base64常被誤解為加密演算法,其實是一種編碼。在加密演算法中,是需要先編碼再加密的,Hex和Base64就是加密演算法中常用的編碼。

Hex編碼是一種用16個字元(0-9,a-f)表示任意二進位制資料的方法,就是二進位制資料用16進位制資料表示。

Base64是一種用64個字元(A-Z a-z 0-9 + / =)表示任意二進位制資料的方法。很明顯Base64可以表示更多的資料,應用廣發,圖片,大檔案等等。

相關文章