ironcladでハッシュ関数MD5を使ってみる

概要

sharplispers/ironclad: A cryptographic toolkit written in Common Lisp でハッシュ関数MD5を使ってみた。

コード

quicklispironclad をインストールする。

(ql:quickload "ironclad")

文字列をバイト配列に変換する関数とバイト配列を16進数表記にする関数を定義する。

(defun plain2bytes (message)
  (sb-ext:string-to-octets message  :external-format :utf-8))

(defun bytes2hexstr (bytes)
  (reduce (lambda (x y) (format nil "~x~x" x y)) bytes :initial-value ""))

ironclad の doc/ironclad.html を参考ハッシュ関数MD5を呼び出す。

(let* ((message "hello!"))
  (bytes2hexstr (ironclad:digest-sequence :md5 (plain2bytes message))))
5A8DD3AD756A93DED72B823B19DD877

検証

RFC 1321 – The MD5 Message-Digest Algorithm の”A.5 Test suite”を参照して、正しく呼び出せているか確認する。

MD5 (“message digest”) = f96b697d7cb7938d525a2f31aaf161d0

(let* ((message "message digest"))
  (bytes2hexstr (ironclad:digest-sequence :md5 (plain2bytes message))))
F96B697D7CB7938D525A2F31AAF161D0

参考文献