如何在Clojure中访问argon-jvm库的Argon2id枚举实现哈希?
在Clojure中访问Argon2-jvm的Argon2id枚举值
别担心,这个问题其实很好解决!在Clojure里访问Java枚举的逻辑和Java本身一致,只是语法上有个小细节需要注意。
核心解决方法
你已经正确导入了Argon2Factory类,现在要访问嵌套的Argon2Types枚举里的Argon2id常量,只需要记住Clojure里的两个规则:
- 用
$代替Java中的.来引用嵌套类/枚举类 - 用
/来访问枚举类里的常量值
所以对应的枚举常量引用就是:de.mkammerer.argon2.Argon2Factory$Argon2Types/Argon2id
完整示例代码
下面是创建Argon2id实例并进行哈希、验证的完整代码:
;; 导入必要的类 (import 'de.mkammerer.argon2.Argon2Factory) ;; 创建使用Argon2id算法的实例 (def argon2-instance (Argon2Factory/create de.mkammerer.argon2.Argon2Factory$Argon2Types/Argon2id)) ;; 哈希密码(参数分别是迭代次数、内存大小、并行度、明文密码) (def hashed-pw (.hash argon2-instance 10 65536 1 "my-secret-password")) ;; 验证密码是否匹配 (.verify argon2-instance hashed-pw "my-secret-password") ; 返回true (.verify argon2-instance hashed-pw "wrong-password") ; 返回false
优化代码可读性
如果觉得类名太长,可以给嵌套枚举类起别名,让代码更简洁:
(import '[de.mkammerer.argon2 Argon2Factory] '[de.mkammerer.argon2.Argon2Factory$Argon2Types :as Argon2Types]) ;; 现在可以直接用别名访问枚举常量 (def argon2-instance (Argon2Factory/create Argon2Types/Argon2id))
这样写出来的代码既清晰又符合Clojure的风格,完全可以满足你切换到Argon2id算法的需求。
内容的提问来源于stack exchange,提问作者pvik
相关产品推荐
相关产品推荐

