我想要一個使用 base91 的安全密碼。
大家好,我是無能。
最近,Chromium/Chrome 自動生成密碼的功能讓我感到非常不安,所以我希望能夠創建一個在一定程度上簡單且可逆的密碼。
順帶一提,在 Artix Linux 中,base91 命令並非預設安裝,所以這裡假設您已經執行了yay -S base91。
從結論說起
最終我決定用這個方法來生成。
echo -n "string" | sha384sum | awk '{print $1}' | xxd -r -p | base91 | tr -d "\n" && echo
※事後回想,或許awk '{printf $1}'會更好。
碎碎念
老實說,我之前經常使用 sha*sum 生成的字串,字數上還算滿意,而且雜湊值本身是不可逆的,所以即使被洩露了也沒什麼大不了的。
然而,雜湊本身只不過是將字串轉換為十六進制形式,如果遇到真正的暴力破解,所處理的字串類型在正規表達式上就只是 [a-z0-9]。
而且現在都要求使用大寫字母和符號了,我自己卻還在用這種方式,真是糟糕。
所以這次,我想方設法增加這個字串的模式數量。
這次的方法會如何
首先,讓我們來分解它
echo -n "string"
將字串無換行地輸出到標準輸出,並透過管道傳遞給下一個命令
sha384sum
將接收到的字串用SHA384進行雜湊。
awk '{print $1}'
接收到的字串末尾多餘的字串 - 是不需要的,所以用awk進行格式化。
xxd -r -p
這是我自己查了之後才知道的,它將十六進制字串輸出為二進制格式。
因此
它將接收到的字串輸出為二進制格式。
base91
將接收到的二進制數據用base91編碼並輸出。
tr -d "\n" && echo
因為base91會自動進行換行格式化處理,所以需要刪除換行符;如果成功,為了方便複製貼上,最後會輸出一個空行。
結果就像這樣。
alleycat:[haturatu]:~/git/ckr/ckr$ echo -n "a" | sha384sum | awk '{print $1}' | xxd -r -p | base91 |tr -d "\n" && echo
"OS[fY@wwBqip+$db@5+g!yvk$jE3,M3F({qu]1(_dS2Or()Q:ZqyhOb&9Y
這實際上是我剛才想到的,所以不確定實際上有多少表單能夠接受它。
字串長度為
$ echo -n "a" | sha384sum | awk '{print $1}' | xxd -r -p | base91 |tr -d "\n" | wc -c
59
即使是再短的字串,也能生成 59 個字元。
優點
首先,使用xxd -r -p生成時,可以同時作為二進制數據保存。
因此,即使忘記了原始的string,最壞情況下只要有二進制數據就能恢復。
階段如下:
sha384sum = 不可逆
xxd -r -p = 可逆
base91 = 可逆
就是這樣的步驟。
換句話說,它比原始密碼短語更長,而且如果能盡早將原始密碼短語不可逆化,不是更好嗎?於是就成了這樣。
而且,用這種方法生成後,似乎無法用 saslauthdb 或用於二進制調試的strings命令來讀取二進制數據。
這比持有純文本數據要安全得多。
使用 shasum 進行雜湊時的衝突可能性已經非常低了。
再將其二進制化並以 Base91 格式編碼,這看起來比我用不夠聰明的腦袋想出來的密碼要好得多。
在 .bashrc 中加入函數
老實說,每次都輸入這個簡直是地獄般的折磨,所以
函數名() {
echo -n "$1" | sha384sum | awk '{print $1}' | xxd -r -p | base91 |tr -d "\n" && echo
}
這樣就可以用函數名 string來生成密碼了。
如果這樣還能被破解,那感覺就像是「別再當搖擺帝國的人了」,不,應該是「別再搞加密了」...
此外,如果想增加伺服器端處理的密碼字串長度,可以使用sha512;如果想減少 bash 上可識別的字串長度,可以使用base64。
可以輕鬆地進行更改,並相應地修改函數,然後將其輸入到.bashrc中,對吧?