如何计算 MD5

SBCL 自带了 MD5 函数库可直接使用:

(require :sb-md5)

;;; 计算字符串的 MD5 值
(sb-md5:md5sum-string "123") ; => #(32 44 185 98 172 89 7 91 150 75 7 21 45 35 75 112)
;;; 计算文件的 MD5 值
(sb-md5:md5sum-file "/etc/passwd") ; => #(255 212 127 213 79 195 85 171 77 0 223 247 104 253 183 175)
;;; MD5 值转成十六进制形式
;;; 遍历结果数组,用 format 函数格式化成十六进制表示即可。这里我定义了一个新函数:
(defun md5 (string)
  (with-output-to-string (stream)
    (loop for i across (sb-md5:md5sum-string string)
                                        ; 转换成 2 位的 16 进制,如果不足 2 位前面加 0
       do (format stream "~2,'0x" i))
    stream))

(md5 "123")                    ; => "202CB962AC59075B964B07152D234B70"