我正在比较 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();
而你在比较 nmd
和 null
,所以它是错误的。
if(nmd.equals(null)) ---> This is false.
我所做的是,我创建了两个文件 - 一个 (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();
而你在比较 nmd
和 null
,所以它是错误的。
if(nmd.equals(null)) ---> This is false.