[Clojure]scryptで文字列の暗号化を行う

2013.05.07

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

まとめ

非常に簡単に暗号化と検証ができたのがわかります。速度も高速で軽量なので、手軽に使用できますね。

参考サイトなど