【问题标题】:Need advice for decryption需要解密建议
【发布时间】: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_hashPBKDF2Bcrypt 等函数或类似函数。关键是让攻击者花费大量时间通过蛮力寻找密码。
  • 这只是一个最终项目。它不会进入市场,至少在这个阶段是这样。这只是一个简单/中级程序,以确保我取得好成绩。

标签: java encryption


【解决方案1】:

如果您正在寻找 Java 中的加密和解密,jBcrypt 是另一种选择。它是基于 Blowfish 密码的密码散列函数。以下是使用 jBcrypt 加密和解密密码的示例代码。 加密:

public String hashPassword(String plainTextPassword){
        return BCrypt.hashpw(plainTextPassword, BCrypt.gensalt());
}

检查密码匹配

public boolean checkPass(String plainPassword, String hashedPassword) {
        if (BCrypt.checkpw(plainPassword, hashedPassword))
            return true;
        else
            return false;
}

参考: Password Encryption using jBcypt

【讨论】:

  • 这里没有进行加密或解密。请了解加密和散列之间的区别并编辑您的答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-11
  • 2011-01-26
相关资源
最近更新 更多