我正在比较 BufferedReader.readLine() 的 return 值和一个字符串,但它不起作用

I am comparing return value of BufferedReader.readLine() and a string, but it's not working

我所做的是,我创建了两个文件 - 一个 (message.txt) 包含消息 "hello!",我创建了它的 Messagedigest 并将其存储在第二个文件 (md.txt). 现在我正在尝试创建一个程序,它接受消息及其 md,为消息创建一个新的 md 并比较 md 以检查消息是否被操纵。 这是代码:

//getting the original md
            String omd="";
            FileReader fr= new FileReader("D:\Ns\md.txt");
            BufferedReader br= new BufferedReader(fr);
            while((omd=br.readLine())!=null)
            {
                System.out.println("original md:"+omd);
            }

    //creating md of the file
    MessageDigest md= MessageDigest.getInstance("MD5");
    FileInputStream file =new FileInputStream("D:\Ns\message.txt");
    byte[] dataBytes= new byte[1024];
    int nread=0,nread1;
    while((nread=file.read(dataBytes))!=-1)
    {
        md.update(dataBytes,0,nread);

    }
    byte[] mdbytes=md.digest();
    StringBuffer sb= new StringBuffer();
    for(int i=0; i<mdbytes.length; i++)
    {
        sb.append(Integer.toString((mdbytes[i]& 0xff)+0x100, 16).substring(1));
    }
    String nmd=sb.toString();
    System.out.println("md  created:"+nmd);


    //comparing both
    if(nmd.equals(omd))
    {
        System.out.println("the file is not manipulated!!");
    }
    else{
        System.out.println("the file is manipulated!!");
    }

没有错误,代码是运行,我操作文件中的消息时,显示被操作了。但是即使它没有被操纵并且两个mds都相同,它也表明消息被操纵了。

这是输出:

original md:61c1ec2a71e1e72d95ca5a37589dbff3
md  created:61c1ec2a71e1e72d95ca5a37589dbff3
the file is manipulated!! 

为什么会这样?我在这里做错了什么?

您不需要 while loop 来阅读 md5 hash 文件。因为它只存储one line。像这样简单地阅读它。因为当 while loop exit 时,你的 omd 变量有 null。那是 while 循环的终止条件。

omd=br.readLine();

而你在比较 nmdnull,所以它是错误的。

if(nmd.equals(null))   ---> This is false.