[Clojure]scryptで文字列の暗号化を行う
scryptとは
scryptとは、パスワード等の機密データを暗号化するために使用することができるClojureライブラリです。 用意している関数もシンプル(encryptとverify)で、任意の文字列を簡単に暗号化できます。
環境構築方法
今回使用した動作環境は以下のとおりです。
- OS : MacOS X 10.7.5
- Clojure : 1.5.1
- Leiningen : 2.3.1
Leiningenを使ってプロジェクトのひな形を作成します。
% lein new scrypt % cd scrypt
生成されたproject.cljにscryptライブラリを追加しましょう。
(defproject scrypt "0.1.0-SNAPSHOT" :description "FIXME: write description" :url "http://example.com/FIXME" :license {:name "Eclipse Public License" :url "http://www.eclipse.org/legal/epl-v10.html"} :dependencies [[org.clojure/clojure "1.5.1"] [clojurewerkz/scrypt "1.0.0"]])
depsコマンドでライブラリを追加し、replを起動します。
% lein desp % lein repl nREPL server started on port 57367 REPL-y 0.1.10 Clojure 1.5.1 Exit: Control+D or (exit) or (quit) ・ ・
replでclojurewerkz.scrypt.coreパッケージをrequireして、docでencrypt(暗号化)のドキュメントを確認してみましょう。
user=> (require '[clojurewerkz.scrypt.core :as sc]) nil user=> (doc sc/encrypt) ------------------------- clojurewerkz.scrypt.core/encrypt ([s n r p]) Encrypts a string value using scrypt. Arguments are: s (string): a string to encrypt n (integer): CPU cost parameter (16834 is a good starting value) r (integer): RAM cost parameter (8 is a good starting value) p (integer): parallelism parameter (1 is a good starting value) nil
encrypt関数は、暗号化する文字列とCPUパラメータ、RAMパラメータ、並列処理パラメータを受け取ります。 推奨値も表記されているので、そのまま使ってみましょう。
user=> (let [h (sc/encrypt "hello" 16384 8 1)] #_=> (sc/verify "hello" h)) true ;文字列がマッチするのでtrue user=> (let [h (sc/encrypt "bye" 16384 8 1)] #_=> (sc/verify "good morning" h)) false ;文字列がマッチしないのでfalse
まとめ
非常に簡単に暗号化と検証ができたのがわかります。速度も高速で軽量なので、手軽に使用できますね。