今天專案中突然報這個錯誤,搜遍全網沒有發現同樣案例,特此記錄一下方便其他人遇到此類問題快速解決
此問題出現的原因是欄位中涉及了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可以表示更多的資料,應用廣發,圖片,大檔案等等。