Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/398.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何检查字符串是否为编码形式_Java_String_Md5 - Fatal编程技术网

Java 如何检查字符串是否为编码形式

Java 如何检查字符串是否为编码形式,java,string,md5,Java,String,Md5,我有一个方法,对输入字符串进行编码,然后用我的数据库值(以编码形式存储)检查该值 我需要一种方法,在传递给对字符串进行编码的方法之前检查“strPass”的值 1.管理 2.L4989C 请帮帮我。您必须: 对要用MD5哈希的字符串进行哈希 以十六进制字符串表示哈希 执行str1.equals(str2)以查看两个哈希值是否相等 这是你问的问题的答案 public void checkString(String strPass) { if (strPass.equals("admin")

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

我需要一种方法,在传递给对字符串进行编码的方法之前检查“strPass”的值 1.管理 2.L4989C

请帮帮我。

您必须:

  • 对要用MD5哈希的字符串进行哈希
  • 以十六进制字符串表示哈希
  • 执行str1.equals(str2)以查看两个哈希值是否相等

  • 这是你问的问题的答案

    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()
    方法可能有问题。如果该方法执行以下操作:

  • 使用
    String.getBytes(…)
    将字符串转换为
    字节[]
  • 计算字节的MD5校验和,为您提供另一个
    字节[]
  • 使用
    新字符串(字节[],…)
    将加密的字节转换为字符串
  • 问题是最后一步很可能是有损的。。。而且不正确。大多数字符编码都有未映射到有效字符的字节或字节序列。如果
    字符串
    构造函数在输入字节数组中遇到其中一个,则它将放弃该字符串或将其映射到表示不可映射字符的某个字符(例如“?”)。最终结果是校验和没有正确存储。为了解决这个问题,您必须将校验和的
    字节[]
    形式作为blob存储在数据库中,或者将其编码为十六进制或base64或其他格式



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

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