为了账号安全,请及时绑定邮箱和手机立即绑定

在代码中如何获取应用签名及sha1值

标签:
Android

在需要微信分享、支付的项目中,会涉及到应用签名,这里主要讨论怎么在应用里获取应用的签名信息。

不多说了,直接上代码:

PackageManager packageManager = context.getPackageManager();

//请注意需要PackageManager.GET_SIGNATURES 这个flag

PackageInfo packageInfo = packageManager.getPackageInfo(context.getPackageName(),

PackageManager.GET_SIGNATURES);

Signature[] signs = packageInfo.signatures;

Signature sign = signs[0];

// X509证书,X.509是一种非常通用的证书格式

CertificateFactory certFactory = CertificateFactory.getInstance("X.509");

X509Certificate cert = (X509Certificate) certFactory

.generateCertificate(new ByteArrayInputStream(sign.toByteArray()));

// md5

MessageDigest md = MessageDigest.getInstance("MD5");

// 获得公钥

byte[] b = md.digest(cert.getEncoded());

//key即为应用签名

String key=byte2HexFormatted(b).replace(":", "");

/**

 * 将获取到得编码进行16进制转换

 * 

 * @param arr

 * @return

 */

private static String byte2HexFormatted(byte[] arr) {

StringBuilder str = new StringBuilder(arr.length * 2);

for (int i = 0; i < arr.length; i++) {

String h = Integer.toHexString(arr[i]);

int l = h.length();

if (l == 1)

h = "0" + h;

if (l > 2)

h = h.substring(l - 2, l);

str.append(h.toUpperCase());

if (i < (arr.length - 1))

str.append(':');

}

return str.toString();

}

最后在附上如何获取sha1值:

/** 

 * 获得app 的sha1值 * 

 * @param context 

  * @return */ 

 public static String getAppSignSha1(Context context) { 

 try { 

 PackageManager packageManager = context.getPackageManager();

 PackageInfo packageInfo = packageManager.getPackageInfo(context.getPackageName(), PackageManager.GET_SIGNATURES);

// X509证书,X.509是一种非常通用的证书格式 

 Signature[] signs = packageInfo.signatures;

 Signature sign = signs[0]; 

CertificateFactory certFactory = CertificateFactory.getInstance("X.509"); 

 X509Certificate cert = (X509Certificate) certFactory .generateCertificate(new ByteArrayInputStream(sign.toByteArray()));  // md5

 MessageDigest md = MessageDigest.getInstance("SHA1"); 

  // 获得公钥 byte[] b = md.digest(cert.getEncoded()); 

 return byte2HexFormatted(b); 

 } catch (Exception e) {

 e.printStackTrace(); 

 }

  return null; }

原文链接:http://www.apkbus.com/blog-625356-61016.html

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消