Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/366.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.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_Jsp_Encryption - Fatal编程技术网

Java JSP简单密码加密解密

Java JSP简单密码加密解密,java,jsp,encryption,Java,Jsp,Encryption,我需要加密密码以插入数据库中。此外,当我需要该密码时,我需要解密此值。执行此操作的简单方法是什么 注意:此操作不一定非常安全。请不要实施您当前的计划,而应使用a来完成此操作。将单向加密哈希函数应用于用户密码(例如SHA-256、SHA-384和SHA-512中的一个[还有其他])和a,以防止基于密码的攻击。最后,对于密码重置,只需替换当前密码哈希 例如, // We need a bytesToHex method first. So, from - // http://stackoverflo

我需要加密密码以插入数据库中。此外,当我需要该密码时,我需要解密此值。执行此操作的简单方法是什么


注意:此操作不一定非常安全。

请不要实施您当前的计划,而应使用a来完成此操作。将单向加密哈希函数应用于用户密码(例如SHA-256、SHA-384和SHA-512中的一个[还有其他])和a,以防止基于密码的攻击。最后,对于密码重置,只需替换当前密码哈希

例如,

// We need a bytesToHex method first. So, from -
// http://stackoverflow.com/a/9855338/2970947
final protected static char[] hexArray = "0123456789ABCDEF"
    .toCharArray();

public static String bytesToHex(byte[] bytes) {
  char[] hexChars = new char[bytes.length * 2];
  int v;
  for (int j = 0; j < bytes.length; j++) {
    v = bytes[j] & 0xFF;
    hexChars[j * 2] = hexArray[v >>> 4];
    hexChars[j * 2 + 1] = hexArray[v & 0x0F];
  }
  return new String(hexChars);
}

// Change this to something else.
private static String SALT = "123456";

// A password hashing method.
public static String hashPassword(String in) {
  try {
    MessageDigest md = MessageDigest
        .getInstance("SHA-256");
    md.update(SALT.getBytes());        // <-- Prepend SALT.
    md.update(in.getBytes());
    // md.update(SALT.getBytes());     // <-- Or, append SALT.

    byte[] out = md.digest();
    return bytesToHex(out);            // <-- Return the Hex Hash.
  } catch (NoSuchAlgorithmException e) {
    e.printStackTrace();
  }
  return "";
}

public static void main(String[] args) {
  System.out.println(hashPassword("Hello"));
  System.out.println(hashPassword("Hello"));
  System.out.println(hashPassword("Hello1"));
  System.out.println(hashPassword("Hello2"));
}

演示一个字符产生的哈希值有多么大的不同。

另一种方法是使用Encrypt类用随机生成的
密钥值对密码进行加密。但是您需要将
keyvalue
存储在数据库中以获得加密密码。像这样,

Integer randVal = random.nextInt();
Encrypt encrypt = new Encrypt();
// convert password to encrypted password
String encyppassword = encrypt.encryptText(
Integer.toString(randVal) + "",
your_password);
Decrypt decrypt = new Decrypt();
Integer randVal = keyvalue_from_db;
String decryptedPassword = decrypt.decryptText(
    String.valueOf(randVal.toString()),
    encrypted_password);
解密时,需要使用keyvalue和加密密码。像这样,

Integer randVal = random.nextInt();
Encrypt encrypt = new Encrypt();
// convert password to encrypted password
String encyppassword = encrypt.encryptText(
Integer.toString(randVal) + "",
your_password);
Decrypt decrypt = new Decrypt();
Integer randVal = keyvalue_from_db;
String decryptedPassword = decrypt.decryptText(
    String.valueOf(randVal.toString()),
    encrypted_password);

希望这有帮助。

不应该是“只替换当前密码哈希”?哦!我明白了,但我没有太多时间。那么有什么代码可以做到这一点吗?我尝试了一些方法,但没有成功。@Ellios非常感谢你。我如何才能解密这个哈希值?@mekafe你没有。这就是重点。用户是唯一可以提供“正确”密码的人。即使有人获得了您的密码数据库的副本,他们也无法确定另一个用户的密码。@mekafe用户给了您他们的密码,您再次对其进行哈希运算;如果哈希值与数据库中存储的值匹配,则是正确的。否则,这是不正确的。要更改密码,请以其他方式验证用户的身份,然后替换密码哈希。