自主的20%るぅる

各々が自主的に好き勝手書くゆるふわ会社ブログ

JavaScriptでSHAハッシュを作りたくなったときに読み返すためのメモランダム

あるよね……

ひっさびっさに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でインストールできるっぽいっす
Let’s share this article!

{ 関連記事 }

{ この記事を書いた人 }

アバター画像
Yuta Hayakawa

2016年6月入社。2020年12月より取締役に就任しました。

普段は東京本社で管理職のお仕事したり、広報的役割としてテキスト書いたり動画作ったりするのが最近のお仕事。

自称「社内システムチーム統括」として、社内システムチームの面々を見守りつつ毎日を過ごしています。

プライベート面では、音楽やコンピュータ関連、ゴルハム&ジャンハム関係、ゲーム関係が興味あるポイント。

あと、我が子可愛い。

記事一覧