如何计算 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"