概要
sharplispers/ironclad: A cryptographic toolkit written in Common Lisp でハッシュ関数MD5を使ってみた。
コード
quicklisp
で ironclad
をインストールする。
(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