【发布时间】:2017-06-22 09:37:25
【问题描述】:
我目前正在处理我的最后一个项目,到目前为止,我有一个注册页面,其中存储了您的用户名、电子邮件和密码。 对于密码,它使用 SHA 算法进行加密,但我发现 SHA 消化了密码,从而使其无法解密。 我需要你的帮助才能找到某种加解密代码。 这是我的代码:
try {
PrintWriter arq = new PrintWriter(jTextField1.getText()+".txt");
arq.println("Username: " + jTextField1.getText());
arq.println("Email: " + jTextField2.getText());
String algorithm = "SHA";
byte[] plainText = jPasswordField1.getText().getBytes();
MessageDigest md = null;
try {
md = MessageDigest.getInstance(algorithm);
} catch (NoSuchAlgorithmException e) {
}
md.reset();
md.update(plainText);
byte[] encodedPassword = md.digest();
StringBuilder sb = new StringBuilder();
for (int i = 0; i < encodedPassword.length; i++) {
if ((encodedPassword[i] & 0xff) < 0x10) {
sb.append("0");
}
sb.append(Long.toString(encodedPassword[i] & 0xff, 16));
}
arq.println("Password: " + sb.toString());
arq.close();
if(!jTextField2.getText().equals(jTextField3.getText())
||!jPasswordField1.getText().equals(jPasswordField2.getText())){
JOptionPane.showMessageDialog(null, "Either your email or
password are not corresponding. Please fix the issue.");
}
else{
JOptionPane.showMessageDialog(null, "Account created!");
}
} catch (HeadlessException | FileNotFoundException erro) {
JOptionPane.showMessageDialog(null, "Error creating Account. Please
try again.");
}
仅供参考,此代码是从 JForm 中注入到按钮上的。 提前感谢您提供的任何帮助。
【问题讨论】:
-
如果您添加相关的编程语言标签(Java?)会有所帮助。
-
对不起,我忘了,是的,使用的语言是 Java。
-
不要加密密码,当攻击者获得管理员权限时,他也会得到加密密钥。仅使用散列函数是不够的,仅添加盐对提高安全性无济于事。使用随机盐在 HMAC 上迭代大约 100 毫秒,然后将盐与哈希一起保存。使用
password_hash、PBKDF2、Bcrypt等函数或类似函数。关键是让攻击者花费大量时间通过蛮力寻找密码。 -
这只是一个最终项目。它不会进入市场,至少在这个阶段是这样。这只是一个简单/中级程序,以确保我取得好成绩。
标签: java encryption