我正在尝试通过Java上的密码激活我的程序。基本上在用户注册时,将询问由授权人员给出的“教师通行证”,如果正确,则程序将允许用户自己使用。
学生也可以使用该计划,但他们无法获得某些内容。
private static String encrypt()
{
String s = "CORNFLAKES";
String pass = "";
Random rnd = new Random();
int i = rnd.nextInt(s.length());
for(int j = 0; j < 7; j++)
{
pass += ""+ i + s.charAt(i);
i = rnd.nextInt(s.length());
}
return pass;
}
private static boolean decrypt (String s)
{
if(s.length() != 14)
return false;
String teacherPass = "CORNFLAKES";
String[] tokens = s.split("A|B|C|D|E|F|G|H|I|J|K|L|M|N|O|Q|P|R|S|T|U|V|W|X|Y|Z");
int loc;
for(int i = 0; i< 7; i++)
{
loc = Integer.parseInt(tokens[i]);
if(s.charAt(2*i+1) != teacherPass.charAt(loc))
return false;
}
return true;
}
绝对有一个更好的解决方案,但它是什么?顺便说一句,我使用MySQL来保存用户信息。
答案 0 :(得分:1)
您应该查看哈希存储密码,然后在登录时再次哈希并比较哈希值。
例如: http://en.wikipedia.org/wiki/SHA-2
哈希(正确使用和实现时)具有非常好的密码存储和验证属性: 该程序无法逆转。因此,即使有人访问您的用户凭据表,他们也无法了解您的用户密码。通过对新输入进行散列并比较散列来检查输入的密码与存储的散列。
如果你不是安全专家,你也不应该自己写这样的东西,因为你总会犯一个让整个系统不安全的小错误。使用合适的库。
你也应该研究哈希的盐,但从简单的哈希开始,一旦你理解了基础知识就继续。