问题描述
大家好,我正在尝试实施防篡改保护,并在 xamarin形式的android 应用中验证应用签名。目前,我正在使用以下代码:
var context = Android.App.Application.Context;
Signature sigs = context.PackageManager.GetPackageInfo(context.PackageName,PackageInfoFlags.Signatures).Signatures[0];
DisplayAlert("sigs.ToString()",sigs.ToString(),"ok"); //1331014879
DisplayAlert(" sigs.GetHashCode().ToString()",sigs.GetHashCode().ToString(),"ok"); // android.content.pm.Signature@4f55acdf
sigs.GetHashCode()。ToString()返回 1331014879
sigs.ToString()返回 android.content.pm.Signature@4f55acdf
但是我想我可能做错了。这是在运行时获取验证android应用程序签名的正确方法吗?否则,请提供代码和指导。谢谢。
解决方法
如果API28或更高版本,则应像此线程一样检查是否有多个Signers。 How to use PackageInfo.GET_SIGNING_CERTIFICATES in API 28?
这是xamarin.android代码。
public string Sig_Hash()
{
var Context = Android.App.Application.Context;
foreach (Android.Content.PM.Signature signature in Context.PackageManager.GetPackageInfo(Context.PackageName,PackageInfoFlags.Signatures ).Signatures)
{
using (SHA1Managed sha1 = new SHA1Managed())
{
var hash = sha1.ComputeHash(signature.ToByteArray());
var sb = new StringBuilder(hash.Length * 2);
foreach (byte b in hash)
{
sb.Append(b.ToString("X2"));
}
return sb.ToString();
}
}
return "";
}