為什麼很多產品的密碼不能用中文?中文密碼會有什麼問題?
目前在做一個app,ios在交互上限制了密碼不能用中文,但android攻城師說這個限制很傻,不願在android客戶端做限制,我找了一堆理由都說服不了他,求各位指引。。
你不知道客戶端是使用UTF-8編碼還是UTF-16編碼,或者是GBK甚至是討厭的GB2312。
雖然大部分語言使用UTF-16或者UTF-32作為內部表示,但是內存的位元組序也是可以影響結果的。(挺多資料庫是運行在UNIX系統上的,對於PowerPC和SPARC結構的機器位元組序就和我們常用的x86和ARM不一樣,也就是,客戶端、應用伺服器和資料庫伺服器HASH的結果有可能會不一樣)
所以,在絕對保證編碼為UTF-8,或者其他與位元組序無關的變長編碼的情況下,可以使用非ASCII字元的口令。不然容易出現無法預計的問題。
你確定只是很多密碼不能用中文?什麽產品的密碼可以用中文啊真沒見過……
Android工程師說這個限制傻是因爲什麽你有沒有確認清楚?
1.他認爲用戶根本不會在密碼中嘗試中文,因爲目前來看確實沒有中文密碼的使用習慣,而且大多產品在這裡會用一些文字提示用戶輸入字母和數字組合的密碼,可能他認爲特地進行一個限制多此一舉
2.他真心認爲用戶應該可以設置一個中文的密碼
這兩者是有區別的,最好跟工程師溝通清楚,如果是前者你可以從交互角度據理力爭進一步説服他,如果是後者……參考@王朗 和 @黎欣健 的答案反對所有說編碼問題的,客服端服務端都是你寫的,把編碼統一成UTF-8很難?
編碼可能會出問題,主要是這個,而且你讓別人輸入中文的密碼還得用中文輸入法選字什麼的,不符合普遍的用戶體驗
如果你在一台木有中文輸入法的客戶端登錄
那可能會杯具
你在輸入中文密碼的時候很容易被你身後的人看到。。。。
除英文外,其他語言的編碼複雜。比如說,中文有GB2312、UTF-8、UTF-16、GBK等一系列亂七八糟的編碼方式。提交上來的密碼存到資料庫以後,資料庫本身並不知道你輸入的究竟是何種編碼,導致以後用戶登錄時的校驗存在問題。
如果客戶端編碼和伺服器端編碼不一致,你輸入的正確的中文並不是正確的密碼
技術上完全沒問題。實際上有的網站本身就是支持中文密碼的(如 discuz 類的論壇原生就支持),有的軟體也是支持的,如winrar,只是都不能用普通的輸入法直接健入,需要用複製粘帖的方式輸入,挺麻煩的。我個人是用的輸入法特殊,倒能直接輸入的,定義成個詞,十幾個字的漢字及標點等組成的超強密碼刷地就輸進去了,比傳統的輸密碼方式利落多了,還更安全。
中文密碼明明更好記,同樣的字數下加密強度也更高,也好輸入——定義成個詞,一下子就輸進去了,多爽利,還能因此防著鍵盤記錄器等木馬呢。
只是想不想做的問題啦,我看就是一個懶字,或是還想兼顧著國外用戶吧。
Greg?21:38
謝謝回答。。我給他的解釋和各位說的差不多(編碼問題不是很了解,沒說),我又不想強制性要求他必須這麼做,還是希望以說服教育為主,他小子就是不聽啦。。。個人覺得,他是覺得你太傲了,總想著教育他,而不是和他共同探討。。。。產生厭惡感之後的強烈反彈(可能不是這次,之前就有積累了),其實作為程序員真恨不得都是英文才好。。。
也可能就是想表達自己地位比你高,想控制你,抑或想擺脫你的控制。。。本人在一起和人合作開發時,也有過類似的表現,明知道自己錯,但是就是和你擰著干,生怕被你控制了。
後來成熟點,特別是團隊合作意識強了之後,不再以個人為中心。但是我想很多人也和我一樣,有過這樣的心理。樓主多和他交流交流吧,遇到分歧先肯定他的觀點,然後再分析,最後列出正確理由。就像這個樓主現在這個問題,他要用中文,你可以先說「嗯,你說的對,中文也應該被支持,讓我再思考思考「,雖然他的說的的確不太對,然後你可以整理一下你的觀點,寫出來再和他討論。這樣他總是被肯定,自己慢慢就說服了自己。人都是需要被肯定的。可能跑題了,希望幫到樓主推薦閱讀:
※lastpass 如何刪除賬戶?
※raid5 磁碟陣列真的不安全么?
※如何評價 2017 年 2 月 1 日 GitLab 資料庫被誤刪?
※大數據時代,數據的個人隱私的界限到底在哪裡?數據安全如何把控?
※Mac 上 Finder 的「清倒廢紙簍」和「安全清倒廢紙簍」有什麼區別?