解密用户身份验证

时间:2013-03-05 16:49:04

标签: authentication hash encryption

我试图在验证时避免数据库访问以提高性能

经过大量搜索之后的有效解决方案似乎是在cookie中存储加密字符串并尝试在验证时对其进行解密。

因此,我想知道以下是否是一个好主意:

  1. 通过SSL传输所有内容(我很懒..)
  2. 在我的程序中设置全局常量密钥
  3. 在注册和密码更改时生成新的随机验证字符串,将其存储在用户对象
  4. 生成带有验证字符串和密钥的加密验证字符串
  5. 将未加密和加密的验证字符串存储在Cookie
  6. 当用户尝试登录时,解密验证字符串并检查原始验证字符串
  7. 如果它是一个“OK”的想法,我该如何让它真正起作用,如:

    我应该使用什么加密方法,AES-256?

    如何使用Bouncycastle在Java中进行这种加密/解密?

    如果不是一个好主意,我该怎么做才能避免在身份验证时查询数据库?

    提前结束!

1 个答案:

答案 0 :(得分:0)

您在上面描述的问题称为“RememberMe”。 解决问题的两种方法:

1)创建自己的身份验证框架。

成功验证后,在cookie中加入一个用户名的加密值(我强烈建议不要使用散列;也请不要输入用户密码值)。

Cookie应该最多持续2周。

对于加密,请使用BouncyCastle的AES-256加密: How to use Bouncy Castle lightweight API with AES and PBE 请不要在cookie中添加任何简单的值。 如果您的框架成功解密cookie - 用户已通过身份验证。如果您的框架无法解密cookie或cookie不存在 - 用户未经过身份验证。 注销后请清理cookie。

2)请考虑使用Spring Security框架: http://static.springsource.org/spring-security/site/docs/3.1.x/reference/springsecurity-single.html

这是一个很棒的框架,解决了很多身份验证/授权问题。

“RememberMe”功能解决了您的问题: http://static.springsource.org/spring-security/site/docs/3.1.x/reference/springsecurity-single.html#ns-remember-me

如果您需要任何其他说明,请告诉我。

致以最诚挚的问候,

迈克尔