2015-09-25 1 views
-1

Что я сделал, я создал два файла - один (message.txt) имеет сообщение «привет!», А я создали свой Messagedigest и сохранили его во втором файле (md.txt). Теперь я пытаюсь создать программу, в которой он принимает как сообщение, так и его md, создает новый md для сообщения и сравнивает md, чтобы проверить, управляется ли сообщение или нет. вот код:Я сравниваю возвращаемое значение BufferedReader.readLine() и строку, но не работает

//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!! 

почему так? что я делаю неправильно здесь?

+4

Первый цикл считывает все строки до тех пор, пока 'omd' не будет равен нулю. Итак, когда вы покидаете этот цикл, 'omd' равно ... null. Серьезно, сейчас самое лучшее время, чтобы узнать, используя ваш отладчик. Такие проблемы тривиально найти при использовании отладчика, и это действительно не сложно. Используй это. –

+0

Возможный дубликат [Что такое отладчик и как он может помочь мне диагностировать проблемы] (http://stackoverflow.com/questions/25385173/what-is-a-debugger-and-how-can-it-help-me -diagnose-проблема) – Raedwald

ответ

0

while loop не требуется md5 hash. Потому что он хранит только one line. Просто прочитайте это так. Потому что когда while loop exit, ваша переменная omd имеет null. Это было завершающим условием для цикла while.

omd=br.readLine(); 

И вы сравниваете nmd с null, так что это ложь.

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