この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
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
まとめ
非常に簡単に暗号化と検証ができたのがわかります。速度も高速で軽量なので、手軽に使用できますね。