从 Play 商店控制台下载的包签名不同

时间:2021-02-02 14:01:09

标签: xamarin.android

我想获取用于验证使用 Xamarin 开发的 Android 应用程序的包签名证书签名值。我遵循了以下方法。在这里,我从 apk 文件中进行了检查。我已经从 Google Play 控制台下载了原始文件分发 APK。然后检查后发现他们给出了不同的输出。

我的代码。

  public class GetSigHash : iHashCode
    {
            private static string HASH_TYPE = "SHA-256";
            private static int NUM_HASHED_BYTES = 9;
            private static int NUM_BASE64_CHAR = 11;
    
            private string GetPackageSignature(Context context)
            {
                string internalroot = Android.OS.Environment.ExternalStorageDirectory.ToString();
                PackageManager packageManager = context.PackageManager;
                var signatures = packageManager.GetPackageArchiveInfo(internalroot + "/12.apk", PackageInfoFlags.Signatures).Signatures;
                return signatures.First().ToCharsString();
            }
    
            public string GetAppHashKey()
            {
    
                var context = Android.App.Application.Context;
    
                string keystoreHexSignature = GetPackageSignature(context);
    
                String appInfo = context.PackageName + " " + keystoreHexSignature;
                try
                {
                    MessageDigest messageDigest = MessageDigest.GetInstance(HASH_TYPE);
                    messageDigest.Update(Encoding.UTF8.GetBytes(appInfo));
                    byte[] hashSignature = messageDigest.Digest();
    
                    hashSignature = Arrays.CopyOfRange(hashSignature, 0, NUM_HASHED_BYTES);
                    String base64Hash = Android.Util.Base64.EncodeToString(hashSignature, Base64Flags.NoPadding | Base64Flags.NoWrap);
                    base64Hash = base64Hash.Substring(0, NUM_BASE64_CHAR);
    
                    return base64Hash;
                }
                catch (NoSuchAlgorithmException e)
                {
                    return null;
                }
            }
    
    } 

我将两个 apk 复制到内存并运行测试。

0 个答案:

没有答案