Jenkins使用什么密码加密?

时间:2014-08-28 11:10:07

标签: java jenkins hudson

我正在修改Jenkins作业的xml。有一个字段是密码。当我得到xml时,它就是原始密码,现在有一个哈希值。

我需要知道如何从原始密码值创建此哈希。

  <scm class="com.deluan.jenkins.plugins.rtc.JazzSCM">
    <username>user</username>
    <password>zlvnUMF1/hXwe3PLoitMpQ6BuQHBJ1FnpH7vmMmQ2qk=</password>
  </scm>

我一直在阅读Jenkins source code,我认为HudsonPrivateSecurityRealm.java是参与的,但我不确定salt参数。

PS:这不适用于Jenkins密码是针对一个插件,在作业配置中它有一个密码字段。

3 个答案:

答案 0 :(得分:35)

实际上,它不是哈希,而是加密密码。我想加密密钥存储在主节点中。实际上,您可以通过在master的脚本控制台上执行以下groovy脚本来解密密码

import hudson.util.Secret

def secret = Secret.fromString("zlvnUMF1/hXwe3PLoitMpQ6BuQHBJ1FnpH7vmMmQ2qk=")
println(secret.getPlainText())

如果你想加密密码,那么

import hudson.util.Secret

def secret = Secret.fromString("your password")
println(secret.getEncryptedValue())

计算机上加密的密码只能在该特定计算机上解密,因为密钥是随机生成的,显然在不同的计算机上密钥不同。

查看core/src/main/java/hudson/util/Secret.java了解详情

答案 1 :(得分:17)

另一种可能性是通过Jenkins Groovy控制台执行Groovy脚本(您可以通过 JENKINS_URL / script 访问它):

println(hudson.util.Secret.decrypt("zlvnUMF1/hXwe3PLoitMpQ6BuQHBJ1FnpH7vmMmQ2qk=")) 

使用python可以实现其他一些方法:

https://github.com/tweksteen/jenkins-decrypt
https://gist.github.com/menski/8f9980999ed43246b9b2

答案 2 :(得分:6)

Jenkins使用AES-128-ECB进行所有加密。它基本上使用master.key文件来加密存储在hudson.util.Secret文件中的密钥。然后,此密钥用于加密credentials.xml中的密码。

因此,要解密Jenkins密码,您基本上需要访问hudson.util.Secretmaster.key个文件。您可以通过查看hudson.utils.Secret类及其fromString方法来确切了解Jenkins如何加密密码。基本上,在使用KEY加密之前,密码与魔术连接。

有关详细信息,请查看:Credentials storage in Jenkins

要解密密码,请按以下步骤操作:

  1. 以Jenkins的管理员身份登录后,请转到:/script页面。
  2. 运行以下命令:

    println(hudson.util.Secret.decrypt("{XXX=}"))
    

    或:

    println(hudson.util.Secret.fromString("{XXX=}").getPlainText())
    

    其中{XXX=}是您的加密密码。这将打印普通密码。

    相反,运行:

    println(hudson.util.Secret.fromString("some_text").getEncryptedValue())
    
  3. 来源:gist at tuxfight3r/jenkins-decrypt.groovy

    或者检查以下脚本:tweksteen/jenkins-decrypt,  menski/jenkins-decrypt.py