【发布时间】:2016-10-01 18:10:29
【问题描述】:
我对 Java 很陌生。我必须编写一个程序,从用户那里获取用户名和密码,使用 MD5 转换密码,然后验证用户名和密码。用户有 3 次机会输入正确的信息。一旦正确,我需要显示欢迎消息。如果输入错误信息 3 次,程序需要退出。我什至不知道从哪里开始。
我收到了一个包含 MD5 信息的文件。我还获得了一个文件,其中包含所有用户信息以及散列密码。
这些是用户凭据:
griffin.keyes 108de81c31bf9c622f76876b74e9285f "alphabet soup"
rosario.dawson 3e34baa4ee2ff767af8c120a496742b5 "animal doctor"
bernie.gorilla a584efafa8f9ea7fe5cf18442f32b07b "secret password"
我得到的 MD5 是:
import java.security.MessageDigest;
public class MD5Digest {
public static void main(String[] args) throws Exception {
//Copy and paste this section of code
String original = "letmein"; //Replace "password" with the actual password inputted by the user
MessageDigest md = MessageDigest.getInstance("MD5");
md.update(original.getBytes());
byte[] digest = md.digest();
StringBuffer sb = new StringBuffer();
for (byte b : digest) {
sb.append(String.format("%02x", b & 0xff));
}
//End copy/paste
System.out.println("original:" + original);
System.out.println("digested:" + sb.toString()); //sb.toString() is what you'll need to compare password strings
}
}
我也应该将我的程序分成 2 个单独的方法,但这是我现在最不担心的问题。我已经为此工作了一个星期,但我还没有走得太远。任何帮助将不胜感激。这是我所拥有的
import java.security.MessageDigest;
import java.util.Scanner;
class CredAndPass {
public static void CredAndPass() throws Exception {
String original = "letmein"; //Replace "password" with the actual password inputted by the user
MessageDigest md = MessageDigest.getInstance("MD5");
md.update(original.getBytes());
byte[] digest = md.digest();
StringBuffer sb = new StringBuffer();
for (byte b : digest) {
sb.append(String.format("%02x", b & 0xff));
}
}
}
public class AuthSystem {
public static void main(String[] args) throws Exception {
int i;
String username = "";
String password = "";
for (i = 0; i <= 2; ++i){
Scanner scnr = new Scanner(System.in);
System.out.println("Enter username:");
username = scnr.next();
System.out.println("Enter password:");
String password1 = scnr.next();
}
}
}
【问题讨论】:
-
请注意(并告诉您的老师/雇主)MD5 存储密码绝不安全。相反,我们需要一个带有成本因子的散列函数,它控制计算散列所需的时间(如 BCrypt、SCrypt 或 PBKDF2)。