安卓程序如何获取另一个apk的签名
补充点小知识:
1,字节数组和字符串之间的转换
1、字节数组转换为字符串
byte[] byBuffer = new byte[20];
String strRead = new String(byBuffer);
strRead = String.copyValueOf(strRead.toCharArray(), 0, byBuffer.length]);
2、字符串转换成字节数组
byte[] byBuffer = new byte[200];
String strInput="abcdefg";
byBuffer= strInput.getBytes();
注意:如果字符串里面含有中文,要特别注意,在Android系统下,默认是UTF8编码,一个中文字符相当于3个字节,只有gb2312下一个中文相当于2字节。这种情况下可采取以下办法:
byte[] byBuffer = new byte[200];
String strInput="我是字符串";
byBuffer= strInput.getBytes("gb2312");
2.base64加密
几种加密方式
http://blog.csdn.net/top_code/article/details/11538317
/**
* BASE64 加密
* @param str
* @return
*/
byte[] encode = str.getBytes("UTF-8");
// base64 加密
return new String(Base64.encode(encode, 0, encode.length, Base64.DEFAULT), "UTF-8");
3.获取程序自身的签名
http://blog.csdn.net/wulianghuan/article/details/18400581
private String getSign(Context context) {
PackageManager pm = context.getPackageManager();
List<PackageInfo> apps = pm.getInstalledPackages(PackageManager.GET_SIGNATURES);
Iterator<PackageInfo> iter = apps.iterator();
while(iter.hasNext()) {
PackageInfo packageinfo = iter.next();
String packageName = packageinfo.packageName;
if (packageName.equals(instance.getPackageName())) {
MediaApplication.logD(DownloadApk.class, packageinfo.signatures[0].toCharsString());
return packageinfo.signatures[0].toCharsString();
}
}
return null;
4.获取已安装程序的签名
http://lynen.iteye.com/blog/1700126
public Signature getPackageSignature(Context context, String packageName){
PackageManager pm = context.getPackageManager();
List<PackageInfo> apps = pm.getInstalledPackages(PackageManager.GET_SIGNATURES);
Iterator<PackageInfo> it = apps.iterator();
while(it.hasNext()){
PackageInfo info = it.next();
if(info.packageName.equals(packageName)){
return info.signatures[0];
}
}
return null;
}