Java 字符串转 SHA1

新手上路,请多包涵

我正在尝试用 Java 制作一个简单的 String 到 SHA1 转换器,这就是我所拥有的……

 public static String toSHA1(byte[] convertme) {
    MessageDigest md = null;
    try {
        md = MessageDigest.getInstance("SHA-1");
    }
    catch(NoSuchAlgorithmException e) {
        e.printStackTrace();
    }
    return new String(md.digest(convertme));
}

当我通过它时 toSHA1("password".getBytes()) ,我得到 [�a�ɹ??�%l�3~��. 我知道这可能是一个简单的编码修复,比如 UTF-8,但是有人可以告诉我我应该怎么做才能得到我想要的东西 5baa61e4c9b93f3f0682250b6cf8331b7ee68fd8 ?还是我这样做完全错了?

原文由 Brian 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 476
2 个回答

更新

您可以使用 Apache Commons Codec (版本 1.7+)为您完成这项工作。

 DigestUtils.sha1Hex(stringToConvertToSHexRepresentation)

感谢 @Jon Onstott 提出的这个建议。


旧答案

将您的字节数组转换为十六进制字符串。 Real 的 How To 告诉您怎么做

 return byteArrayToHexString(md.digest(convertme))

和(从 Real’s How To 复制)

 public static String byteArrayToHexString(byte[] b) {
  String result = "";
  for (int i=0; i < b.length; i++) {
    result +=
          Integer.toString( ( b[i] & 0xff ) + 0x100, 16).substring( 1 );
  }
  return result;
}


顺便说一句,您可能会使用 Base64 获得更紧凑的表示。 Apache Commons Codec API 1.4 具有这个不错的实用程序,可以消除所有痛苦。 参考这里

原文由 Nishant 发布,翻译遵循 CC BY-SA 3.0 许可协议

这是我将字符串转换为 sha1 的解决方案。它在我的 Android 应用程序中运行良好:

 private static String encryptPassword(String password)
{
    String sha1 = "";
    try
    {
        MessageDigest crypt = MessageDigest.getInstance("SHA-1");
        crypt.reset();
        crypt.update(password.getBytes("UTF-8"));
        sha1 = byteToHex(crypt.digest());
    }
    catch(NoSuchAlgorithmException e)
    {
        e.printStackTrace();
    }
    catch(UnsupportedEncodingException e)
    {
        e.printStackTrace();
    }
    return sha1;
}

private static String byteToHex(final byte[] hash)
{
    Formatter formatter = new Formatter();
    for (byte b : hash)
    {
        formatter.format("%02x", b);
    }
    String result = formatter.toString();
    formatter.close();
    return result;
}

原文由 petrnohejl 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏