【问题标题】:How to check whether the string is in encoded form or not如何检查字符串是否为编码形式
【发布时间】:2011-10-17 07:07:35
【问题描述】:

我有一个方法,我对输入字符串进行编码,然后用我的数据库值(以编码形式存储)检查该值,

public void checkString(String strPass){
String s = MD5.crypt(strPass);

code to check the string s with the data base value..

}

我需要一种方法来检查“strPass”的值,然后再将其传递给对字符串进行编码的方法。strPass 的数据可能采用以下形式 1. 管理员 2. L4989C

请帮帮我..

【问题讨论】:

  • 您的第二个表单以“L”开头。这是一个有效的 md5 字符吗?
  • hi cherouvim,基本上第二种形式是随机生成的字符串,在密码重置事件发生时将存储在数据库中。
  • 为什么要投反对票,请让我知道,以便我改进帖子的那部分...
  • 这不是您应该遇到的问题。它表明系统其他地方存在主要设计问题。

标签: java string md5


【解决方案1】:

你必须:

  1. 用 MD5 散列你想散列的字符串。
  2. 用十六进制字符串表示哈希
  3. 执行 str1.equals(str2) 以查看 2 个哈希值是否相等。

【讨论】:

    【解决方案2】:

    这是您所提问题的答案。

    public void checkString(String strPass) {
        if (strPass.equals("admin") || strPass.equals("L4989C")) {
            // do something else
        } else {
            String s = MD5.crypt(strPass);
            // code to check the string s with the data base value.
    }
    

    但是,我认为您的MD5.crypt() 方法可能存在问题。如果该方法执行以下操作:

    1. 使用String.getBytes(...) 将字符串转换为byte[]
    2. 计算字节的MD5校验和,给你另一个byte[]
    3. 使用new String(byte[], ...) 将加密字节转换为字符串。

    问题是最后一步很可能是有损的......而且不正确。大多数字符编码具有不映射到有效字符的字节或字节序列。如果String 构造函数在输入字节数组中遇到其中之一,那么它将丢弃它或将其映射到某个表示不可映射字符的字符(例如“?”)。最终结果是校验和未正确存储。为了解决这个问题,您必须将校验和的 byte[] 形式作为 blob 存储在数据库中,或者以十六进制或 base64 或其他格式对其进行编码。


    如果您提供 MD5.crypt 方法的源代码...或告诉我们它来自哪个库,这将有助于理解您的问题。

    【讨论】:

      猜你喜欢
      • 2016-12-17
      • 1970-01-01
      • 2010-12-01
      • 2012-01-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多