Java suma kontrolna pliku

0

Witam, potrzebuje napisać funkcje sprawdzającą sume kontrolną pliku do zapisywanych zdjęć za pomocą mojej funkcji.

Widziałem kilka przykładów obliczania sumy kontrolnej ale chyba nie rozumiem tego w 100%, tzn. rozumiem koncepcje po co to sie robi, ale chyba nie do końca rozumiem mechanizm, nie chciałbym tutaj wypisywać co mi się wydaje lub co przypuszczam, może znalazłby się ktoś, kto mógłby mi to na spokojnie wytłumaczyć bazując na przykładzie tego kodu?

@Override
    protected Void doInBackground(Void... params) {         //Downloading an image

        if (Patterns.WEB_URL.matcher(urlString1).matches()) {

            try {


                is = urlAdress.openStream();

                OutputStream os = new FileOutputStream(outputFile);
                byte[] image = new byte[2048];
                int length;

                while ((length = is.read(image)) != -1) {
                    os.write(image, 0, length);
                }


                is.close();
                os.close();

            } catch (MalformedURLException e) {
                e.printStackTrace();
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }else{Toast.makeText(contexts.getApplicationContext(), "Please insert valid url adress" , Toast.LENGTH_SHORT).show();}

            return null;
        }
0

Policz md5 albo sha256 zamiast kombinować? ;) Zresztą do CRC też masz gotowe biblioteki albo gotowce. A co do tego kodu to nie bardzo rozumiem - tam przecież nie ma żadnego liczenia sumy kontrolnej.

0

Wiem, że nikt nie jest tutaj od tlumaczenia podstaw, ale znalazłem cos takiego. Niejasna jest dla mnie linijka oznaczona komentarzem, a także drugi argument metody, jak on miałby się do mojego przykładu? rozumiem że jest to String przesyłany w celu porównania, ale skąd wiedzieć jaki String przesłać jako parametr?

 public static boolean testChecksum(String file, String testChecksum) throws NoSuchAlgorithmException, IOException
    {
        MessageDigest md5 = MessageDigest.getInstance("MD5");
        FileInputStream fis = new FileInputStream(file);
  
        byte[] data = new byte[1024];
        int read = 0; 
        while ((read = fis.read(data)) != -1) {
            md5.update(data, 0, read);
        };
        byte[] hashBytes = md5.digest();
  
        StringBuffer sb = new StringBuffer();
        for (int i = 0; i < hashBytes.length; i++) {
          sb.append(Integer.toString((hashBytes[i] & 0xff) + 0x100, 16).substring(1)); // Co się tutaj odbywa w tzn. co jest dołączane do obiektu sb???
        }
         
        String fileHash = sb.toString();
         
        return fileHash.equals(testChecksum);
    }

1 użytkowników online, w tym zalogowanych: 0, gości: 1