パスワードの格納に使っていて
いつもはMac上で作業していて、Linux上で作業したらハマったのでまとめておく。
稼働を始めたシステム上からユーザ登録すれば、問題はないものの、まとめて追加して欲しいと連絡を受けた。
DBに直接登録しようとして、仕様の違いでミスを犯すところだった。
PHP上では
$pass = md5("password");
みないな処理で、この値をDBに格納している。
で、もって手作業で追加するなら
$ md5 -s passwordMD5 ("password") = 5f4dcc3b5aa765d61d8327deb882cf99
と表示されるのを、CSVにして、まとめて追加作業を行う。
(実際はスクリプトで吐くんだけど)
Macでのmd5は以下の通り。
$ md5 --helpmd5: illegal option -- -usage: md5 [-pqrtx] [-s string] [files ...]
今回、外で作業する必要が発生したので、 同様にLinux Noteで作業した。
ところが、Linuxには「md5」ではなく「md5sum」しかない。
$ md5sum --help使用法: md5sum [OPTION]... [FILE]...MD5 (128-bit) チェックサムを表示または照合します。FILE の指定が無いか、 - が指定された場合、標準入力から読み込みます。
-b, --binary バイナリモードで読み込む -c, --check FILE から MD5 チェックサムを読み込み、照合する -t, --text テキストモードで読み込む (デフォルト)
次の3つのオプションはチェックサムを照合する場合にのみ有効です: --quiet ファイルのチェックサムの照合が成功したときに OK を表示しない --status 何も出力しない。終了コードで結果を判別する -w, --warn チェックサム行の書式が不正な場合に警告を行う
--strict --check と併せて使用し、無効な入力がある場合に 0 以外で終了する --help この使い方を表示して終了する --version バージョン情報を表示して終了する
使い方が違うだけなので、まあパイプで喰わせればいいやと…。
$ echo 'password' | md5sum286755fad04869ca523320acce0dc6a4 -
あれれ?
mac上での実行と、結果が違う。
これは、何かがおかしい。
そこで、ファイルに文字列を書き込んで、検証。
$ cat - > p.txtp$ md5sum p.txt286755fad04869ca523320acce0dc6a4 p.txt
あれ? さっきと同じ結果。機種によって違うのか?
でも、そんなはずはない。
原因は改行コードだった
直接ファイルをエディタで編集していて、気づいた。
p.txtの中身が
password[改行]
になっている。
ここで、[改行]を削除して、通してみると
$ md5sum p.txt5f4dcc3b5aa765d61d8327deb882cf99 p.txt
最初と同じ結果になった。
問題は改行コードだ!
つまり、echo の出力の最後に改行コードが付加されているから結果が違っていた。
ECHO(1) User Commands ECHO(1)
NAME echo - display a line of text
SYNOPSIS echo [SHORT-OPTION]... [STRING]... echo LONG-OPTION
DESCRIPTION Echo the STRING(s) to standard output.
-n do not output the trailing newline
はあ、manを見るとちゃんと書いてある…。
$ echo -n 'password' | md5sum5f4dcc3b5aa765d61d8327deb882cf99 -
改行の出力を抑制してやらないと、いけなかった訳だ。
うぅ、こんな事で時間を無駄に使ってしまった。
まあ、原因がはっきりして良かったけどね…。
コメント
コメントを投稿
励みになりますので、簡単で良いので一言くださいませ。