Java 如何在JSP中以编程方式加密/解密纯文本凭证?
作为我日常工作的一部分,我不幸管理了一个古老的、一度“只是内部的”JSP web应用程序,该应用程序依赖于以下身份验证模式:Java 如何在JSP中以编程方式加密/解密纯文本凭证?,java,authentication,jsp,encryption,Java,Authentication,Jsp,Encryption,作为我日常工作的一部分,我不幸管理了一个古老的、一度“只是内部的”JSP web应用程序,该应用程序依赖于以下身份验证模式: ... // Validate the user name and password. if ((user != null) && (password != null) && ( (user.equals("brianmay") && password.equals("queen")) || (user.e
...
// 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,我是一个完全的新手,所以我非常感谢您提供的任何建议
非常感谢 首先,您应该将该逻辑从jsp移动到一个单独的类中 其次,您不应该在代码中的任何地方保留纯文本密码。使用某种单向散列函数(md5,sha1,…),只保留密码散列
检查用户密码时,首先对其进行散列,然后比较散列。很难理解您正在考虑的确切方案,但我假设密码来自一个请求,您希望在发送请求的JSP中计算MD5散列。之后,您可以将其与预先计算的MD5版本进行比较。如果不使用https并在提交密码之前使用哈希来散列密码,那么您甚至可以更加安全 您可以像下面这样在java中MD5字符串:
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
}
谢谢你的回复,伙计。你介意详细介绍一下你提到的技巧吗?太好了!谢谢!存储MD5散列的最简单方法是什么?纯文本文件?如果密码被其他地方使用,那么使用js进行预计算肯定会更安全。否则,预计算散列意味着您只是在服务器端比较两个字符串,它并不比比较裸密码更安全。攻击者可以手动提交散列。我认为我们无权在JS中为特定客户端实现解决方案,因此我必须坚持存储预先计算的MD5,然后进行比较。您能给我一些关于如何在JSP中实现的提示吗?使用carson的代码来获取哈希。第一次通过存储,然后计算并比较存储的值。数据库是公共存储器。文本文件的问题是,您必须同步对它的访问,这样多个用户就不会同时尝试写入它。