Search code examples
androidsha1hashcodeandroid-install-apk

Generate a Hash from installed apk file in memory


I am using this code but it is showing the hash code of the same application. Please Help me out of it .

File file = new File(getApplicationContext().getPackageCodePath());
     String outputTxt= "";
        String hashcode = null;

    try {

        FileInputStream input = new FileInputStream(file);

        ByteArrayOutputStream output = new ByteArrayOutputStream ();
        byte [] buffer = new byte [65536];
        int l;


            while ((l = input.read (buffer)) > 0)
                output.write (buffer, 0, l);

            input.close ();
            output.close ();

            byte [] data = output.toByteArray ();

            MessageDigest digest = MessageDigest.getInstance( "SHA-1" ); 

            byte[] bytes = data;

            digest.update(bytes, 0, bytes.length);
            bytes = digest.digest();

            StringBuilder sb = new StringBuilder();

            for( byte b : bytes )
            {
                sb.append( String.format("%02X", b) );
            }

            hashcode = sb.toString();





    } catch (FileNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (NoSuchAlgorithmException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

Now I want to read the installed application file of my current android application(assuming it will be *.apk), read byte array from that file and produce the Hash value.

Thanks in Advance.


Solution

  • This is the best solution for this.

    First u have to pass the path of the .apk file.

              private CharSequence getHash(String sourceDir)  {
              // TODO Auto-generated method stub
    
              File file = new File(packageInfo.applicationInfo.sourceDir);
             String outputTxt= "";
               String hashcode = null;
    
            try {
    
            FileInputStream input = new FileInputStream(file);
    
            ByteArrayOutputStream output = new ByteArrayOutputStream ();
            byte [] buffer = new byte [65536];
            int l;
    
    
                  while ((l = input.read (buffer)) > 0)
                      output.write (buffer, 0, l);
    
                      input.close ();
                  output.close ();
    
                    byte [] data = output.toByteArray ();
    
                    MessageDigest digest = MessageDigest.getInstance( "SHA-1" ); 
    
                byte[] bytes = data;
    
                digest.update(bytes, 0, bytes.length);
                bytes = digest.digest();
    
                StringBuilder sb = new StringBuilder();
    
                for( byte b : bytes )
                {
                    sb.append( String.format("%02X", b) );
                }
    
                hashcode = sb.toString();
    
    
             } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
             } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
             } catch (NoSuchAlgorithmException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
           }
    
    
    
              return hashcode;
             }