2008-11-21 63 views
2

由于我的日常工作的一部分,我不得不施用古老,曾经依赖于下列身份验证模式“只是内部的” JSP Web应用程序的不幸:如何以编程方式加密/解密JSP中的纯文本凭证?

... 

// Validate the user name and password. 
if ((user != null) && (password != null) && (
    (user.equals("brianmay") && password.equals("queen")) || 
    (user.equals("rogertaylor") && password.equals("queen")) || 
    (user.equals("freddiemercury") && password.equals("queen")) || 
    (user.equals("johndeacon") && password.equals("queen")) 
    )) { 
// Store the user name as a session variable. 
    session.putValue("user", user); 

... 

虽然我想,女王的成员从来都不是系统的使用者,但无论如何它确实是一个很好的例子,不是吗?

尽管通过策略这个客户端通过域身份验证来强制执行安全性,所以这个问题并不被视为安全风险,但我的想法是至少使用一个简单的MD5混淆纯文本凭证或SHA1方法,所以这种敏感数据肉眼不可见。

我是JSP的总新手,所以我非常感谢您愿意与我分享的任何建议。

非常感谢!

回答

4

很难理解你正在考虑的确切方案,但我假设密码是从请求中进来的,并且你想要在发送请求的JSP中计算MD5哈希值。之后,您可以将其与预先计算的MD5版本进行比较。如果未使用https完成,则可以更安全,并在提交密码之前使用javascript MD5 library来散列密码。

可以MD5在Java中的字符串是这样的:

try 
{ 
    String digestInput = "queen"; 

    MessageDigest messageDigest = MessageDigest.getInstance("MD5"); 
    messageDigest.update(digestInput.getBytes()); 

    BASE64Encoder base64Encoder = new BASE64Encoder(); 
    String digestString = base64Encoder.encode(messageDigest.digest()); 

    // digestString now contains the md5 hashed password 
} 
catch (Exception e) 
{ 
    // do some type of logging here 
} 
+0

美丽!非常感谢!什么是最简单的方式来存储MD5哈希?纯文本文件? – 2008-11-21 13:25:00

2

首先,您应该将该逻辑从jsp移动到单独的类。

其次,你不应该在代码中的任何地方保持纯文本密码。使用某种单向散列函数(md5,sha1,...)并仅保留密码散列。

当检查用户密码时,首先对它进行散列,然后比较散列。

+0

感谢很多的答复好友。你介意一下你提到的技术吗? – 2008-11-21 12:33:14

相关问题