Java Android消息摘要可以正确地获取大多数哈希值,但不是所有哈希值

Java Android消息摘要可以正确地获取大多数哈希值,但不是所有哈希值,java,android,hash,message,digest,Java,Android,Hash,Message,Digest,大家好,我正在尝试计算3个不同的散列,稍后我将与我自己的数据库进行匹配。问题是它似乎并不总是生成正确的散列。我知道这是不对的,因为当我获取实际哈希并将其写入VirusTotal时,它会发现它没有问题,但当我尝试使用消息摘要计算它时,它不会返回正确的值 这是我的密码: try { PackageInfo info = pm.getPackageInfo( name, P

大家好,我正在尝试计算3个不同的散列,稍后我将与我自己的数据库进行匹配。问题是它似乎并不总是生成正确的散列。我知道这是不对的,因为当我获取实际哈希并将其写入VirusTotal时,它会发现它没有问题,但当我尝试使用消息摘要计算它时,它不会返回正确的值

这是我的密码:

                try {

                    PackageInfo info = pm.getPackageInfo(
                            name, PackageManager.GET_SIGNATURES);

                    for (Signature signature : info.signatures) {
                        MessageDigest md;

                        md = MessageDigest.getInstance("MD5");
                        md.update(signature.toByteArray());


                        byte[] messageDigestMD5 = md.digest();
                        StringBuffer stringBuffer = new StringBuffer();
                        for (byte bytes : messageDigestMD5) {
                            stringBuffer.append(String.format("%02x", bytes & 0xff));
                        }
                        stringBuffer.append(" ");
                        md = MessageDigest.getInstance("SHA-1");
                        md.update(signature.toByteArray());
                        byte[] messageDigestSHA1 = md.digest();
                        for (byte bytes : messageDigestSHA1){
                            stringBuffer.append(String.format("%02x", bytes & 0xff));
                        }
                        stringBuffer.append(" ");
                        md = MessageDigest.getInstance("SHA-256");
                        md.update(signature.toByteArray());
                        byte[] messageDigestSHA256 = md.digest();
                        for (byte bytes : messageDigestSHA256){
                            stringBuffer.append(String.format("%02x", bytes & 0xff));
                        }
                        res.setHash(stringBuffer.toString());
                    }

                } catch (PackageManager.NameNotFoundException e1) {
                } catch (NoSuchAlgorithmException e) {
                } catch (Exception e) {
                }
So res.setHash(stringBuffer.toString());是我自己的setter函数,它将所有内容添加到其他部分使用的结果列表中。同样,它似乎可以正确执行大约90%的哈希