tag:blogger.com,1999:blog-751586915633123067.post74081314482676857..comments2024-02-27T08:49:15.745+08:00Comments on 玩具烏托邦: 白話「單向雜湊函數」 & 如何手動修改密碼檔ckhunghttp://www.blogger.com/profile/02399671186667415730noreply@blogger.comBlogger3125tag:blogger.com,1999:blog-751586915633123067.post-32307064887031947722017-12-14T21:50:28.238+08:002017-12-14T21:50:28.238+08:00大幅改寫: 改從 「打 game 改超人」 切入、 加入一段略談 bitcoin、 請臺大資工薛智文...大幅改寫: 改從 「打 game 改超人」 切入、 加入一段略談 bitcoin、 請臺大資工薛智文教授 校閱指正ckhunghttps://www.blogger.com/profile/02399671186667415730noreply@blogger.comtag:blogger.com,1999:blog-751586915633123067.post-37819401251136152152017-02-23T17:47:41.528+08:002017-02-23T17:47:41.528+08:00哎呀, 每行開頭的空白縮排被 Blogspot 去掉了.
Shell Script 沒關係, Pyt...哎呀, 每行開頭的空白縮排被 Blogspot 去掉了.<br />Shell Script 沒關係, Python 代碼裡面的 "while" 和 "if" 內沒有縮排會沒辦法跑的. 捕上去就 ok.treegbhttps://www.blogger.com/profile/07177652234779831495noreply@blogger.comtag:blogger.com,1999:blog-751586915633123067.post-65696358104384307702017-02-23T17:40:42.906+08:002017-02-23T17:40:42.906+08:00以下是我在
[編程隨想的博客 - 如何構造安全的口令/密碼]
https://program-thi...以下是我在<br />[編程隨想的博客 - 如何構造安全的口令/密碼]<br />https://program-think.blogspot.com/2010/06/howto-prevent-hacker-attack-3.html<br />的留言.<br /><br />我們可以利用 [單向密碼雜湊函式] 算出密碼, 這樣每次登入網站需要輸入密碼時, 可以 "算" 出來, 不需要 "背密碼". 我把下面 python script 也放到手機裡, 萬一哪天出門需要輸入密碼, 拿出手機算一下就知道了, 不用背.<br /><br /><br />------------- 以下是我的留言 ----------------<br /><br /><br />分享一下我個人產生 Hash 的方式, 跟編成隨想的最後一個方式大同小異.<br />好的演算法不怕攤在陽光下, 這邊給大家參考.<br /><br /><br />## Shell script (把這隻 script 存進 ~/.bashrc 或 ~/.bash_profile, 用類 Unix 的人都懂的) :<br /><br />##################################################<br />#asKansweR script in ~/.bashrc 或 ~/.bash_profile.<br />asKansweR () {<br /> read answeR<br />echo -n "$answeR" | sha512sum | sed -n 's/^\(.*\) -$/\1/p' | tr -d '\n' | xxd -r -p | base64 | tr -d '\n' | sed -n 's/^\(.*\)/\1\n/p'<br />}<br />##################################################<br /><br />這個 script 我相信 windows 10 以上也可以跑, 因為 windows 10 現在好像可以支援 Ubuntu 的 bash 的樣子, 不須安裝額外東西, 大家可以玩玩看.<br /><br />sha512 計算出來的 hash 值會再用 base64 編碼轉換一次, 這樣訊息密度比較大 (相同長度產生的組合可能性比較高, 因為 base64 的合法字元從 a ~ z, A ~ Z, 還有少數幾個符號).<br />你要把以上存在 shell script 也可以, 那就把 asKansweR 函式名稱拿掉.<br /><br /><br />## Python :<br /><br />##################################################<br />#asKansweR.py<br />import base64<br />import hashlib<br /><br />w = None<br /><br />while w != "exit":<br /> w = input("")<br /> if w == "exit" or w == "quit":<br /> break<br /> ## Generate sha512 hash (message digest) (in binary format?) from original message.<br /> x = hashlib.sha512(str.encode(w)).digest()<br /> y = base64.b64encode(x)<br /> print(y.decode("utf-8"))<br />##################################################<br /><br />Python 版的執行方式像這樣 : "python3 asKansweR.py", 然後一樣開始打字, 打完按 Enter, 輸入 "exit" 或 "quit" 再 Enter 跳出.<br /><br />這個 script我自己也是有放在手機上, 外出時如果需要輸入密碼我可以把手機掏出來當場 "算" 出密碼, 不過 andriod 的系統會不會側錄我是另外一回事 ...<br /><br /><br />## 或是使用線上免費網站轉換器 :<br /><br />可搜尋 "sha512 online converter", "base64 online converter" ... 之類的, 很好找, 比如這 2 個 :<br />http://hash.online-convert.com/sha512-generator<br />http://en.1mu.info/tools/hexbase64.html<br /><br />這邊注意一下, 這裡的目的只是要實驗或證明這些函式的算法得到的結果是可靠和一致的, 因為把明文資料送給這些網頁工具沒有安全性可言, 你在計算之前已經把明文送給這些伺服器了.<br />而且也是要證明這些密碼雜湊函式是開放標準, 隨隨便便都可以取得, 你不用擔心找不到或算不出來.<br /><br /><br />## 密碼產生實際過程 :<br /><br />舉例來說, 我的 Message 如果是 :<br />apple<br />會產生 Message Digest :<br />hE2HeRA7lMGPSqTMDDtEdAWFgKmR+6hdPKaYoLyeUsWUD+t6ZaOikOF+ayPulD7MT3PnSQMnJFtP5dXvtZD+sg==<br /><br />我的 Message 如果是 :<br />apple2<br />會產生 Message Digest :<br />30dgOP4El5SqOpr+WdmEjIFZppXby4Ul3wG9nCZNrERPynMqDBUFYH4ZWypuXGennNkH34ESa+mmxDC9Xa86Gw==<br /><br />Message 你要打多長都隨你, 要打什麼符號也可.<br />但最後的密碼長度我通常只會取大概 15 位數, 不含 / 和 + 符號, 如果我的祕密字串 (Message) 是 "apple2", 那我對應的密碼 (Message Digest) 就是 "30dgOP4El5SqOpr".<br />(Base 64 的目地只是要讓相同長度的密碼產生的組合可能性比較高, 除此之外沒有其他意義. Base64 的合法字元除了 a ~ z, A ~ Z, 還有 / 和 + 2 個符號, 但這 2 個符號我個人習慣是不會用的.)<br /><br />只不過沒有試過編成隨想說的不斷遞迴幾千次的計算, 我曾經考慮過 pbkdf2 而不是 sha512 做遞迴計算, 但想想我其實不需要用到這麼安全, 因為安全的瓶頸其實是在網站資料庫本身.treegbhttps://www.blogger.com/profile/07177652234779831495noreply@blogger.com