Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.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 什么是等价的解密代码_Java_Security_Encryption_Passwords_Decode - Fatal编程技术网

Java 什么是等价的解密代码

Java 什么是等价的解密代码,java,security,encryption,passwords,decode,Java,Security,Encryption,Passwords,Decode,请让我知道解密的等效代码。我已经用这个编码方法加密了我的密码,现在我想解密 MessageDigest digest = MessageDigest.getInstance("MD5"); digest.update(password.getBytes()); BASE64Encoder encoder = new BASE64Encoder(); byte hashedBytes[] = (new String(digest.digest(), "UTF-8")).getBytes(); Sy

请让我知道解密的等效代码。我已经用这个编码方法加密了我的密码,现在我想解密

MessageDigest digest = MessageDigest.getInstance("MD5");
digest.update(password.getBytes());
BASE64Encoder encoder = new BASE64Encoder();
byte hashedBytes[] = (new String(digest.digest(), "UTF-8")).getBytes();
System.out.println(encoder.encode(hashedBytes))

简单的回答是你不能。MD5是一个散列,这意味着理论上用它“加密”的数据不能转换回原始数据。这是一个单向函数,(理论上)不能反转。请继续阅读以了解更多信息

就像你有一台机器,通过返回书中的页数来处理书一样。你可以给它一本书,你会得到一个值回来,但只有从机器的输出,它是不可能告诉什么是喂进来的


更多详情:

从Wikipedia页面获取加密哈希函数:

加密散列函数是一种散列函数,它接受任意数据块并返回固定大小的位字符串,即加密散列值,因此对数据的任何(意外或有意)更改都将(以非常高的概率)更改散列值

理想的加密哈希函数有四个主要属性:

  • 计算任何给定消息的哈希值都很容易
  • 生成具有给定哈希的消息是不可行的
  • 在不更改哈希的情况下修改消息是不可行的
  • 用相同的哈希值查找两个不同的消息是不可行的
注意要点2。这意味着从散列中生成密码实际上是不可能的

诚然,MD5在加密方面被认为是不安全的,但它仍然意味着没有一种从散列到输入的通用方法。

这是的重复,散列函数中的差异并不重要。另外,请阅读你应该阅读的内容。它解释了为什么不需要解密来验证密码,以及为什么MD5甚至SHA-2是密码哈希的错误选择。