如何解决如何在 ColdFusion 中使用 jargon2-api?
我必须在 Adobe ColdFusion 2018 中实现 Argon2 哈希。我发现了两个可以使用的 Java 绑定:
- argon2-jvm:https://github.com/phxql/argon2-jvm
- jargon2-api:https://github.com/kosprov/jargon2-api
我成功集成的第一个。它运行良好,唯一的问题是它不允许传递 'pepper' 字符串(也称为 'secret')。
所以我也尝试集成其他绑定。为了解决依赖性问题,我使用了 JavaLoader (https://github.com/markmandel/JavaLoader)。我通过 Maven 获得的罐子。
但是,我收到以下异常:
Typ | java.lang.UnsatisfiedLinkError
Diagnose | Unable to load library 'argon2': Das angegebene Modul wurde nicht gefunden. Das angegebene Modul wurde nicht gefunden. Das angegebene Modul wurde nicht gefunden. Native library (win32-x86-64/argon2.dll) not found in resource path ([file:/D:/ColdFusion2018/cfusion/lib/updates/chf20180010.jar,
代码如下:
component name="Argon2Kosprov" output="false" {
public function init(string pepper = "pepper") {
getJavaLoader();
// More info about the API: https://github.com/kosprov/jargon2-api
local.jargon2 = variables.javaLoader.create("com.kosprov.jargon2.api.Jargon2");
variables.hasher = local.jargon2.jargon2Hasher();
initConstants();
variables.hasher.type(variables.argon2Type);
// Parameters
variables.hasher.memoryCost(65536); // 64MB memory cost
variables.hasher.timeCost(3); // 3 passes through memory
variables.hasher.parallelism(4); // use 4 lanes and 4 threads
variables.hasher.saltLength(16); // 16 random bytes salt
variables.hasher.hashLength(16); // 16 bytes output hash
applyPepper(arguments.pepper);
// Just get a hold on the verifier. No special configuration needed.
variables.verifier = local.jargon2.jargon2Verifier();
return this;
}
public void function applyPepper(required string pepper) {
local.binaryValue = stringToBinary(arguments.pepper);
variables.hasher.secret(local.binaryValue);
}
public string function hashString(required string string) {
// Set the password and calculate the encoded hash
local.binaryValue = stringToBinary(arguments.string);
local.encodedHash = variables.hasher.password(local.binaryValue).encodedHash();
return local.encodedHash;
}
public boolean function checkString(required string string,required string hash) {
// Set the encoded hash,the password and verify
return variables.verifier.hash(arguments.hash).password(arguments.string).verifyEncoded();
}
// private functions
private void function initConstants() {
local.argon2Types = variables.javaLoader.create("com.kosprov.jargon2.api.Jargon2$Type");
final variables.argon2Type = local.argon2Types.ARGON2id
}
/**
* @hint Load specific .jar files using JavaLoader
* */
private component function getJavaLoader() {
if (NOT StructKeyExists(variables,"javaLoader")) {
local.jararray = [
Expandpath("/jars/net/java/dev/jna/jna/5.6.0/jna-5.6.0.jar"),Expandpath("/jars/com/nativelibs4java/ochafik-util/0.12/ochafik-util-0.12.jar"),Expandpath("/jars/com/nativelibs4java/jnaerator-runtime/0.12/jnaerator-runtime-0.12.jar"),Expandpath("/jars/com/kosprov/jargon2/jargon2-native-ri-backend/1.1.1/jargon2-native-ri-backend-1.1.1.jar"),Expandpath("/jars/com/kosprov/jargon2/jargon2-native-ri-binaries-generic/1.1.1/jargon2-native-ri-binaries-generic-1.1.1.jar"),Expandpath("/jars/com/kosprov/jargon2/jargon2-api/1.1.1/jargon2-api-1.1.1.jar")
];
variables.javaLoader = CreateObject("component","lib.shared.javaloader.JavaLoader").init(local.jararray);
}
return variables.javaLoader;
}
private any function stringToBinary(required string) {
local.base64Value = toBase64(arguments.string);
local.binaryValue = toBinary(base64Value);
return local.binaryValue;
}
}
它是这样调用的:
<cfset local.argon = new lib.shared.argon2.Argon2Kosprov()>
<cfset local.password = "alabala">
<cfset local.hash = local.argon.hashString(local.password).encodedHash()>
然后出现异常,说找不到 DLL。 DLL 在 JAR 中,不应单独加载。
有没有人偶然成功地将这种 Argon2 绑定集成到 Coldfusion 中?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。