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

如何生成与Jira数据库存储一致的用户密码哈希值?

Jira密码哈希匹配相关问题解答

Jira使用的密码哈希具体算法

Jira的密码哈希算法随版本迭代有差异,不同版本的默认算法如下:

  • Jira 6.0及以上版本默认使用PBKDF2WithHmacSHA1,数据库中存储的credential字段标识为{PKCS5S2}
  • Jira 7.13及以上版本新增可选算法PBKDF2WithHmacSHA256、BCrypt,对应标识分别为{PBKDF2WithHmacSHA256}、{bcrypt}
  • Jira 6.0之前的旧版本使用标准SHA1算法,存储标识为{SHA}

数据库中存储的完整哈希串格式为:{算法标识}${迭代次数}${盐Base64编码}${哈希结果Base64编码},各段以$作为分隔符。

是否可以生成完全匹配的哈希

可以生成完全匹配的哈希,生成失败几乎都是参数未对齐导致的,只要拿到对应账号的明文密码、数据库中存储的对应盐、迭代次数、算法类型四个参数完全一致,即可生成100%匹配的哈希值。

具体操作步骤

  • 第一步:从Jira数据库cwd_user表对应账号的credential字段取出完整哈希串,拆分出四个核心参数:算法标识、迭代次数、盐Base64串、原始哈希Base64串
  • 第二步:参数校验对齐:迭代次数必须和拆分结果完全一致,盐必须直接使用拆分出的Base64串解码,不要自行生成新盐,明文密码要完全匹配原始密码的大小写、特殊字符,无多余空格
  • 第三步:按对应算法执行哈希计算,以下为PBKDF2WithHmacSHA1算法的Java参考实现:
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.PBEKeySpec;
import java.util.Base64;

public class JiraHashGenerator {
    public static void main(String[] args) throws Exception {
        // 替换为实际参数
        String plainPassword = "用户原始明文密码";
        int iterationCount = 10000;
        String saltBase64 = "拆分得到的盐Base64串";
        
        byte[] salt = Base64.getDecoder().decode(saltBase64);
        PBEKeySpec spec = new PBEKeySpec(plainPassword.toCharArray(), salt, iterationCount, 160);
        SecretKeyFactory factory = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA1");
        byte[] hashBytes = factory.generateSecret(spec).getEncoded();
        String generatedHash = Base64.getEncoder().encodeToString(hashBytes);
        // 输出的generatedHash和拆分得到的原始哈希Base64串对比即可
        System.out.println(generatedHash);
    }
}
  • 如果算法标识为{bcrypt},直接使用标准BCrypt算法,代入拆分得到的成本因子和盐计算即可
  • 如果算法标识为{SHA},直接计算明文密码的标准SHA1值,再做Base64编码即可匹配

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 07:15:07