当前位置: 首页 > 科技观察

Jenkins专有用户数据库加密算法简析

时间:2023-03-12 21:11:28 科技观察

Jenkins访问控制分为:安全域(即认证)和授权策略。其中,安全域可以采取三种形式,分别是:Jenkins专有用户数据库、LDAP、Servlet容器代理。Jenkins独占用户的数据信息存放位置:/users/每个用户的相关信息存放在config.xml文件中:/users//config.xmlpasswordHashintheconfig.xmlfile节点可以看到用户名加密密文的哈希值。那么,用什么加密方式来加密呢?密文能否解密得到明文?在github上查看其源码,通过关键词#jbcrypt搜索找到文件HudsonPrivateSecurityRealm.java。通过源码分析,文件HudsonPrivateSecurityRealm.java的详细路径为:jenkins/core/src/main/java/hudson/security/HudsonPrivateSecurityRealm.java。:1.密文的格式为:salt:encPass,其中#jbcrypt代表salt作为数据头2.密文encPass是通过jbcrypt算法从明文中得到的关于jbcrypt:jbcrypt是bcrypt加密的java实现工具。它的API很简单,DEMO如下。在HudsonPrivateSecurityRealm.java中可以看到使用了如下API进行加密和校验://HashapasswordforthefirsttimeStringhashed=BCrypt.hashpw(password,BCrypt.gensalt());//gensalt的log_rounds参数决定复杂度theworkfactoris2**log_rounds,默认为10Stringhashed=BCrypt.hashpw(password,BCrypt.gensalt(12));//检查一个未加密的密码是否与之前被哈希过的密码匹配if(BCrypt.checkpw(candidate,hashed))elseSystem.out.println("不匹配");经验证,使用jbcrypt对同一个明文进行加密后,由于salt一般不同,所以加密后的密文一般也不同。关于bcrypt:1.bcrypt是一种不可逆的加密算法,不能通过解密密文得到明文。2、bcrypt与其他对称或非对称加密方式的区别在于,它不是直接解密得到明文,也不是对密文进行两次加密比较,而是将明文和存储的密文一起计算得到另一个密文。如果两者的密文相同,则验证成功。综上所述,Jenkins专有用户数据库采用jbcrypt加密,不可逆,同样的明文加密结果一般不一样。本文来自:http://my.oschina.net/donhui/blog/379925