あるよね……
ひっさびっさにTechネタ書いてみようかなと思い立ったので。小ネタですが。
コの業界でお仕事していると、たまーに「あー、○○で××したいなぁ」って思うことは希によくありますよね。
その代表例といえば……
(」・ω・)」JavaScriptで!(/・ω・)/SHAハッシュ1)このエントリではSHA-1/2/3あたりのハッシュ関数またはその関数を用いて生成されたハッシュ値……的な意味でこの表記を使います(`・ω・´)bを生成したい!
って奴だと思います。2)たぶん代表例ではないと思います
そもそもSHAハッシュってなんなのさ(´・ω・`)?
そもそもの話を自分用のメモがてら書いておきましょう。3)もしも誰かに聞かれたら、黙ってこのURLを示せば仕事できない系エンジニアなのバレずに済むかもしれないですし( ̄ー ̄)ニヤリ
「SHAハッシュ」の「SHA」は、「Secure Hash Algorithm」の略だそうで。4)ちなみに「ハッシュ」の方はというと、「あるデータが与えられたときに、特定のルールに従って処理された値が帰ってくるブツ」みたいに捉えておけば赤点はとらずに済むかしら(´・ω・`)?
いろいろなところで使われているので、エンジニア的には非常に親しみを感じる5)時と場合によっては別な感情を抱くこともあるかもしれませんが……ハッシュ関数ですよね。
いくつかのアルゴリズムが存在していて、大きく分けて「SHA-1」、「SHA-2」、「SHA-3」の3種類のグループが存在している……と。よく使われているのは「SHA-1」な気がしますが、「SHA-1」に脆弱性が存在するとかで(少なくとも特定の界隈では)「SHA-2」への移行が進んでいるようで。
……なるほどですね。
ハッシュ値生成するのって結構大変ですね(;´Д`)
RFCとか適当にぐぐってWikipediaとか眺めてもらうと分かるかと思いますが、結構ゴニョゴニョしないと生成できない6)まあ、当たり前の話で、「そりゃそうだろ」ってアレですがので、イチからコード書くのはナンセンスですよね。
大抵、言語ごとにライブラリなりなんなりが用意されているので、それを使うのが定石な訳です。
とりあえず適当にググって見つかったブツを列挙しておきますね_ノ乙(、ン、)_7)なお、筆者はPHP以外は(PHPも?)ずぶの素人なので、情報の真贋は各自で確認されたし
- PHP: Hash関数
- Python: Hashlib
- Ruby: digest/sha2
- Java: MessageDigestクラス8)Scalaでもコイツを使う感じなんでせぅか?
- Haskell: SHA2パッケージ9)オフィシャルパッケージではない?
- .Net(C#, C++, F#, VB): SHA25クラス
ちなみに戯れで「COBOL SHA-2」とかでググってみたら、サードパーティー製(?)のライブラリが見つかりましたよ。色々なプラットフォームで使える系っぽいので、必要になったら思い出すことにしましょう。10)そして、願わくばその日が訪れないことを祈りましょう
JavaScriptではどうすれば良いのかしら……
ながーぃ前振りはこの辺にして……。
じゃあ、JavaScriptではどうするの?……って話なのですが、便利なのがあるのでそいつを使うとよさげですね。
その名も「jsSHA」!ライブデモがあるので、どんな感じのことができるのかはすぐ分かりますね〜。
GitHubでホスティングされている(Caligatio/jsSHA)ので、そちらのREADME.mdも参照しておくとよさげです。
このライブラリ、Node.jsでも使える11)npnでインストールできるっぽいっすので、JavaScript Love勢は覚えておくと幸せになれるかもしれませんね。
注訳はこちら
↑1 | このエントリではSHA-1/2/3あたりのハッシュ関数またはその関数を用いて生成されたハッシュ値……的な意味でこの表記を使います(`・ω・´)b |
---|---|
↑2 | たぶん代表例ではないと思います |
↑3 | もしも誰かに聞かれたら、黙ってこのURLを示せば仕事できない系エンジニアなのバレずに済むかもしれないですし( ̄ー ̄)ニヤリ |
↑4 | ちなみに「ハッシュ」の方はというと、「あるデータが与えられたときに、特定のルールに従って処理された値が帰ってくるブツ」みたいに捉えておけば赤点はとらずに済むかしら(´・ω・`)? |
↑5 | 時と場合によっては別な感情を抱くこともあるかもしれませんが…… |
↑6 | まあ、当たり前の話で、「そりゃそうだろ」ってアレですが |
↑7 | なお、筆者はPHP以外は(PHPも?)ずぶの素人なので、情報の真贋は各自で確認されたし |
↑8 | Scalaでもコイツを使う感じなんでせぅか? |
↑9 | オフィシャルパッケージではない? |
↑10 | そして、願わくばその日が訪れないことを祈りましょう |
↑11 | npnでインストールできるっぽいっす |