【问题标题】:Convert MD5 into String in javajava中将MD5转为String
【发布时间】:2012-07-24 19:22:24
【问题描述】:

谁能知道如何将 MD5 转换为 String。就我而言,我已将密码保存在数据库中的 MD5 中。我正在尝试检索密码并以字符串形式显示以进行编辑。

这是我将字符串转换为加密格式所做的:

public static String encrypt(String source) {
   String md5 = null;
   try {
         MessageDigest mdEnc = MessageDigest.getInstance("MD5"); //Encryption algorithm
         mdEnc.update(source.getBytes(), 0, source.length());
         md5 = new BigInteger(1, mdEnc.digest()).toString(16); // Encrypted string
        } 
    catch (Exception ex) {
         return null;
    }
    return md5;
}

我不知道如何将加密格式转换为字符串来编辑密码。

【问题讨论】:

  • md5 是一种单向算法,您无法从加密的密码中取回纯密码
  • 哈希算法会产生这样的结果,您无法从结果中取回原始输入。如果您想要这样的功能,请尝试使用加密而不是散列。 (例如 RSA)
  • 添加到 Ankit:单向特性是首先将其存储为 MD5 的全部原因。
  • 所以我如何获得管理员编辑它的纯密码。每当我尝试检索密码时,它都会给我加密值。
  • 管理员永远不会在任何设计合理的系统上编辑密码。他只是改变它。

标签: java md5


【解决方案1】:
    String password = "123456";

    MessageDigest md = MessageDigest.getInstance("MD5");
    md.update(password.getBytes());

    byte byteData[] = md.digest();

    StringBuffer sb = new StringBuffer();
    for (int i = 0; i < byteData.length; i++)
        sb.append(Integer.toString((byteData[i] & 0xff) + 0x100, 16).substring(1));

    System.out.println("Digest(in hex format):: " + sb.toString());

【讨论】:

  • 以上代码将字符串转换为十六进制格式,我的问题是如何恢复为字符串。
  • MD% 是单向算法,不能将 md5 十六进制字符串转换回原始字符串。
  • 在 getBytes 上添加“UTF-8”作为参数可能很有用,因为它可能会在使用拉丁字符时生成错误的哈希。
  • @vchyzhevskyi 这与要求的相反
【解决方案2】:

MD5 是单边散列函数。所以你不能解码它。这就是为什么在许多网站上,您可以选择通过创建新密码来“找回密码”。

More about MD5

【讨论】:

    【解决方案3】:

    String转MD5代码

    private static String convertToMd5(final String md5) throws UnsupportedEncodingException {
            StringBuffer sb=null;
            try {
                final java.security.MessageDigest md = java.security.MessageDigest.getInstance("MD5");
                final byte[] array = md.digest(md5.getBytes("UTF-8"));
                sb = new StringBuffer();
                for (int i = 0; i < array.length; ++i) {
                    sb.append(Integer.toHexString((array[i] & 0xFF) | 0x100).substring(1, 3));
                }
                return sb.toString();
            } catch (final java.security.NoSuchAlgorithmException e) {
            }
            return sb.toString();
        }
    

    【讨论】:

    • 与所要求的完全相反!
    【解决方案4】:

    我认为这是最优雅的方式:

    public String getMD5(String data) {
            String result = null;
            MessageDigest md;
            try {
                md = MessageDigest.getInstance("MD5");
                md.update(data.getBytes(Charset.forName("UTF-8")));
                result = String.format(Locale.ROOT, "%032x", new BigInteger(1, md.digest()));
            } catch (NoSuchAlgorithmException e) {
                throw new IllegalStateException(e);
            }
            return result;
    }
    

    `

    【讨论】:

    • 与所要求的相反!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-07-25
    • 2011-02-02
    • 2020-06-10
    相关资源
    最近更新 更多