Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/341.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在JSP中以编程方式加密/解密纯文本凭证?_Java_Authentication_Jsp_Encryption - Fatal编程技术网

Java 如何在JSP中以编程方式加密/解密纯文本凭证?

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

作为我日常工作的一部分,我不幸管理了一个古老的、一度“只是内部的”JSP web应用程序,该应用程序依赖于以下身份验证模式:

...

// 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的代码来获取哈希。第一次通过存储,然后计算并比较存储的值。数据库是公共存储器。文本文件的问题是,您必须同步对它的访问,这样多个用户就不会同时尝试写入它。