如何检查字符串是否采用编码形式

时间:2011-10-17 07:07:35

标签: java string md5

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

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

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

}

我需要一种在传递给编码string的方法之前检查'strPass'的值的方法.strPass的数据可能是以 管理员 2. L4989C

请帮帮我..

2 个答案:

答案 0 :(得分:1)

你必须:

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

答案 1 :(得分:0)

以下是您提出的问题的答案。

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


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