當用戶輸入一些最好用Unicode或其他非拉丁字符編碼表示的內容時,如何處理服務的密碼?不是US-ASCII,Latin1或Win1252的I18n和密碼
具體而言,您可以使用西里爾文密碼作爲Oracle的密碼嗎?如果密碼是以UTF-8的形式提供的,你如何根據Windows認證機制來驗證用戶的密碼?
我對如何在我們的代碼中處理這個問題有一些想法,但我正在尋求其他人的建議以確保我們的方向正確。
當用戶輸入一些最好用Unicode或其他非拉丁字符編碼表示的內容時,如何處理服務的密碼?不是US-ASCII,Latin1或Win1252的I18n和密碼
具體而言,您可以使用西里爾文密碼作爲Oracle的密碼嗎?如果密碼是以UTF-8的形式提供的,你如何根據Windows認證機制來驗證用戶的密碼?
我對如何在我們的代碼中處理這個問題有一些想法,但我正在尋求其他人的建議以確保我們的方向正確。
編碼本身不應該對加密造成問題,大多數算法對字節操作,而不是字符。唯一可能成爲問題的是:如果在密碼中使用了特殊(非ASCII)字符,則使用不同編碼加密相同的密碼可能會產生不同的值。不過,將密碼轉換爲固定編碼(如UTF8)應該可以解決這個問題。
您可能在身份驗證機制長度限制方面存在問題。
例如如果系統指定的最大長度爲12個字節,則UTF-8中的5箇中文字符可能很容易超過這個長度,但這不是一個問題,因爲四個漢字應該有足夠的熵,但是您需要注意錯誤形式交往。
如果認證機制強制執行像「至少各有一個大寫,小寫,標點符號和數字字符」這樣的規則,則可能會出現其他問題 - 幾種語言沒有大寫/小寫字符,並且定義了幾十個字符unicode,一個母語人士會認爲是數字,但可能不會被一個執行不力的規則所認可。