【问题标题】:Sha-1 Alghoritm gives different output on the same inputSha-1 算法在相同的输入上给出不同的输出
【发布时间】:2014-08-19 23:31:20
【问题描述】:
public void actionPerformed(ActionEvent e) {

        char[] input = aPField[0].getPassword();
        String pw = new String(input);

        a.add(aField[0].getText().trim());
        a.add(pw);

我正在尝试在 Java 中设置登录。我有这个 Encrypt 方法,当用户注册或尝试登录时,我用它来加密密码。问题是该算法使用相同的输入字符串给了我不同的输出。

IE 输入:“测试”

输出:

1) b108a24a44571380fc8e3a56832a8ac4143b3676

2) 2d214a90133f9dce60554c611d07f82a38fa6a82

3) 1b2eead2ae63c66e243fd27491385f4a94cd3e7a

public void actionPerformed(ActionEvent e) {

    ArrayList a = new ArrayList();



    if (e.getActionCommand().equals("login")) {

        a.add(aField[0].getText());
        a.add(aPField[0].getPassword());
        if(box.getState()){

            cf.configWriter("username", aField[0].getText() );

        }


        boolean answer = fc.Login(a, "login");

    }

私有布尔登录(ArrayList a){

    boolean answer = false;

    String username = (String) a.get(0);
    String password = String.valueOf(a.get(1));

    int id = core.login(username, password);


    return answer;

}

protected Integer login(String nomeUtente, String passwordUtente) {

    String pw = cryptPassword(passwordUtente);


    ResultSet rs = null;

    Statement stmt = null;

    String query = "SELECT ID FROM login where Username ='" + nomeUtente
            + "' AND Password = '" + pw + "'";

    int result = -1;

    try {

        stmt = conn.createStatement();
        rs = stmt.executeQuery(query);
        rs.next();
        result = rs.getInt("ID");

    } catch (SQLException e) {

        e.printStackTrace();

    }
    return result;

}

private String cryptPassword(字符串密码) {

    MessageDigest mDigest = null;
    try {
        mDigest = MessageDigest.getInstance("SHA1");
    } catch (NoSuchAlgorithmException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    byte[] result = mDigest.digest(password.getBytes());
    StringBuffer sb = new StringBuffer();
    for (int i = 0; i < result.length; i++) {
        sb.append(Integer.toString((result[i] & 0xff) + 0x100, 16)
                .substring(1));
    }

    String digest = sb.toString();

    System.out.println(digest);

    return digest;
}

我正在通过其他方法发送用户名和密码,因为我在直接进入密码加密器之前使用了前端控制器和其他一些东西。

ActionPerformed->FrontController.loginrequest->LoginController.Login->DbCore.Login->DbCore.cryptPassword。

【问题讨论】:

  • 无法复制。请发布一个重现问题的可运行示例。我的猜测是输入实际上并不相同。也许它们包含空格。此外,SHA1 绝不是一种加密算法。这是一种哈希或摘要算法。
  • “问题是算法使用相同的输入字符串给了我不同的输出”不,它没有。对于输入Test,它每次都会给出输出640ab2bae07bedc4c163f679a746f7ab7fb5d1fa(这是正确的哈希)。

标签: java sha1


【解决方案1】:

简单使用

String password = "Test";
String sha = DigestUtils.sha1Hex(password);

你的 cryptPassword(String password) 函数实现的独立性

【讨论】:

  • 谢谢,但我的功能完美运行,我已经全部修好了
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-06-07
  • 1970-01-01
  • 2013-06-13
  • 2021-09-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多