You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

生成无重复字符的16位Base32词表并匹配指定SHA512哈希的技术问询

实现符合需求的LISP程序方案

我来帮你搞定这个需求,下面是完整的实现思路和可运行的LISP代码:

核心功能拆解

先把要做的事儿拆成明确的步骤:

  • 用标准Base32字符集(A-Z + 2-7,遵循RFC4648规范)生成16位无重复字符的字符串
  • 给生成的字符串加上.txt后缀
  • 计算该完整字符串的SHA512哈希值
  • 和你提供的已知哈希比对,只输出匹配的结果(要求小写格式)

完整LISP代码实现

(ql:quickload :ironclad) ; 加载哈希计算库,需提前通过Quicklisp安装

;; 配置参数:替换成你的目标哈希值
(defparameter *base32-chars* "ABCDEFGHIJKLMNOPQRSTUVWXYZ234567")
(defparameter *target-sha512-hash* "这里替换成你的已知SHA512哈希") ; 示例:"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855..."

(defun generate-unique-base32-word (length)
  "生成指定长度、无重复字符的Base32字符串"
  (let ((available-chars (coerce *base32-chars* 'list))
        (result '()))
    (dotimes (i length)
      (let ((selected-char (nth (random (length available-chars)) available-chars)))
        (push selected-char result)
        ;; 移除已选字符,避免重复
        (setf available-chars (remove selected-char available-chars))))
    (coerce (reverse result) 'string)))

(defun compute-sha512-hex (input-string)
  "计算字符串的SHA512哈希,返回小写十六进制结果"
  (ironclad:byte-array-to-hex-string
   (ironclad:digest-sequence :sha512
                              (ironclad:ascii-string-to-byte-array input-string))))

(defun find-matching-word ()
  "循环生成候选词、计算哈希并比对,输出匹配的小写结果"
  (loop
    (let* ((base32-word (generate-unique-base32-word 16))
           (full-filename (concatenate 'string base32-word ".txt"))
           (computed-hash (compute-sha512-hex full-filename)))
      ;; 比对哈希(忽略大小写,兼容不同格式的输入哈希)
      (when (string-equal computed-hash *target-sha512-hash*)
        (format t "~a~%" (string-downcase full-filename))
        (return))))) ; 找到匹配后退出,若要持续生成可删除这行

;; 启动程序
(find-matching-word)

代码细节解释

  1. 依赖说明:用ironclad库处理哈希计算,这是Common Lisp里常用的加密工具库,直接用Quicklisp就能安装。
  2. 无重复字符生成:每次从剩余的Base32字符里随机选一个,选完就从候选池里删掉,保证16位字符串完全没有重复字符。
  3. 哈希计算:把字符串转成字节数组后计算SHA512,再转成小写十六进制字符串,和目标哈希比对时用string-equal,自动忽略大小写差异。
  4. 输出逻辑:找到匹配的结果后,直接输出小写的带后缀文件名,然后退出循环;如果需要批量生成词表再比对,可以把生成的候选词先写入文件,再批量处理。

小提示

  • 因为是随机生成,找到匹配的时间完全看运气(毕竟16位无重复Base32的组合数极大),如果有特定的生成规则可以告诉我,我再帮你优化。
  • 确保目标哈希是十六进制格式,不管大小写都能正常比对。

内容的提问来源于stack exchange,提问作者Jcfunk

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 09:38:04