【问题标题】:using md5 and salt with j security check使用 md5 和 salt 和 j 安全检查
【发布时间】:2012-04-10 11:42:56
【问题描述】:

现在我正在使用 j 安全检查和 md5 来验证我的 jsp 页面。我想在将密码存储到数据库之前对其进行加盐。由于在学校的访问受限,我无权创建一个触发器来注入一些盐。有没有其他方法可以做到这一点?

这是我的领域:

<Realm 
    className="org.apache.catalina.realm.JDBCRealm" 
    driverName="com.mysql.jdbc.Driver" 
    connectionURL="jdbc:mysql://someurl"
    connectionName="name" 
    connectionPassword="password" 
    userTable="name.users" 
    userNameCol="user_name" 
    userCredCol="user_password" 
    userRoleTable="name.users"
    roleNameCol="role"
    digest="MD5"
    />

【问题讨论】:

  • 你在使用j_security_check是什么意思?你的意思是你正在使用容器管理的身份验证?你用的是什么服务器?如何为此应用程序配置身份验证?
  • 我正在制作一个 jsp 应用程序并使用 glassfish v.7 服务器运行它。所以我设置了我的登录页面,其操作是 j_security_check,然后我在我的 servlet 周围放置了安全约束。
  • 您能否配置用于您的应用程序的“领域”?或者你至少知道正在使用什么领域?
  • 我将领域添加到原始问题中。
  • 好的,您是说 Tomcat 7.0 还是 Glassfish?

标签: tomcat passwords salt realm j-security-check


【解决方案1】:

快速地说:“不,你不能。至少,不是简单的”

事实上,摘要由 org.apache.catalina.realm.RealmBase 类中的 public static final Digest(String credentials, String algorithm,String encoding) 方法处理,您的 JDBCRealm 类继承自该类。这个Digest 方法直接调用MessageDigest 实例,我认为它只能与“MD5”、“SHA-1”和“MD2”一起使用。因此,在应用 MD5 算法之前或之后,您无法对密码执行任何操作

但是,您可以implement a provider 获得您想要的算法。但我警告你,事情没那么简单。

顺便说一句,我个人更喜欢使用 SHA-1 哈希密码而不是 MD5 密码,即使它是加盐的 :-)

【讨论】:

  • 加盐摘要应该为相同的密码返回不同的值。因此,JDBCRealm 的标准实现无法工作,因为它在 authn 期间比较 digest 函数的结果。
【解决方案2】:

我认为唯一的方法是自己实现一些函数(覆盖 JDBCRealm 的方法),例如 authenticate

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-08-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-19
    • 2013-07-30
    • 2013-08-18
    • 2013-05-18
    相关资源
    最近更新 更多