我想获取用于验证使用 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 复制到内存并运行测试。