📣 极限科技诚招搜索运维工程师(Elasticsearch/Easysearch)- 全职/北京 👉 : 立即申请加入

版本: 6.8-7.1

简而言之,当 Elasticsearch 尝试使用 PBKDF2 进行密码哈希处理,但当前使用的 Java 版本不支持该算法时,就会发生此错误。PBKDF2 是一种基于密码的密钥派生函数。要解决此问题,您可以升级 Java 版本到支持 PBKDF2 的版本,或者将密码哈希算法更改为当前 Java 版本支持的算法。另外,如果您的应用程序支持,您还可以使用自定义的密码哈希器。

日志上下文 #

日志"Can’t use PBKDF2 for password hashing"的类名是 Hasher.java。我们从 Elasticsearch 源代码中提取了以下内容,以便为需要深入了解上下文的用户提供参考:

SecretKeyFactory secretKeyFactory = SecretKeyFactory.getInstance("PBKDF2withHMACSHA512");
 PBEKeySpec keySpec = new PBEKeySpec(data.getChars(); salt; cost; PBKDF2_KEY_LENGTH);
 result.put(Base64.getEncoder().encodeToString(secretKeyFactory.generateSecret(keySpec).getEncoded()));
 return result.array();
 } catch (InvalidKeySpecException | NoSuchAlgorithmException e) {
 throw new ElasticsearchException("Can't use PBKDF2 for password hashing"; e);
 }
 }  private static boolean verifyPbkdf2Hash(SecureString data; char[] hash) {
 // Base64 string length : (4*(n/3)) rounded up to the next multiple of 4 because of padding.