public void getSignature() { PackageManager manager = getPackageManager(); StringBuilder builder = new StringBuilder(); String pkgname = getPackageName(); boolean isEmpty = pkgname.isEmpty(); if (isEmpty) { Toast.makeText(this, "应用程序的包名不能为空!", Toast.LENGTH_SHORT); } else { try { PackageInfo packageInfo = manager.getPackageInfo(pkgname, PackageManager.GET_SIGNATURES); Signature[] signatures = packageInfo.signatures; Signature sign = signatures[0]; byte[] signByte = sign.toByteArray(); Log.e("getSingInfo", bytesToHexString(signByte)); Log.e("getSingInfo hash", bytesToHexString(generateSHA1(signByte))); } catch (PackageManager.NameNotFoundException e) { e.printStackTrace(); } } } public static byte[] generateSHA1(byte[] data) { try { // 使用getInstance("算法")来获得消息摘要,这里使用SHA-1的160位算法 MessageDigest messageDigest = MessageDigest.getInstance("SHA-1"); // 开始使用算法 messageDigest.update(data); // 输出算法运算结果 byte[] hashValue = messageDigest.digest(); // 20位字节 return hashValue; } catch (Exception e) { Log.e("generateSHA1", e.getMessage()); } return null; }
public static String bytesToHexString(byte[] bytes) { if (bytes == null) { return ""; } StringBuilder buff = new StringBuilder(); for (byte aByte : bytes) { if ((aByte & 0xff) < 16) { buff.append('0'); } buff.append(Integer.toHexString(aByte & 0xff)); } return buff.toString(); }