hi,你在看这篇文章是吧
考你一个问题,下面这两段函数,执行结果一样么?
public static String getKeyHash(final Context context)
{
PackageInfo packageInfo = getPackageInfo(context, PackageManager.GET_SIGNATURES);
if (packageInfo == null)
return null;
for (Signature signature : packageInfo.signatures) {
try {
MessageDigest md = MessageDigest.getInstance("SHA");
md.update(signature.toByteArray());
return Base64.encodeToString(md.digest(), Base64.NO_WRAP);
} catch (NoSuchAlgorithmException e) {
Log.w(TAG, "Unable to get MessageDigest. signature=" + signature, e);
}
}
return null;
}
public static String getKeyHash2(final Context context) {
PackageInfo packageInfo = getPackageInfo(context, PackageManager.GET_SIGNATURES);
if (packageInfo == null)
return null;
for (Signature signature : packageInfo.signatures) {
try {
MessageDigest md = MessageDigest.getInstance("SHA");
md.update(signature.toByteArray());
Log.w("LogLogLog", Base64.encodeToString(md.digest(), android.util.Base64.NO_WRAP));
return Base64.encodeToString(md.digest(), Base64.NO_WRAP);
} catch (NoSuchAlgorithmException e) {
Log.w("LogLogLog", "Unable to get MessageDigest. signature=" + signature, e);
}
}
return null;
}
答案是:这两个函的返回结果不一样,导致我设置KeyHash一直都不对。
原因就是getKeyHash2多了一行log.
md.digest()
这个函数多执行了一遍,所以最后就会不一样。
写程序的时候,不要觉得一行log无所谓,要严谨呀。
如果要加log,也应该这么加
String keyHash = Base64.encodeToString(md.digest(),Base64.NO_WRAP)
Log.w("LogLogLog", keyHash);
return keyHash;
当你对写的代码不是百分之百了解的时候,为了风险可控,就不要随意的添加冗余代码。
但是又有几个人能说自己对自己的代码百分之百了解呢?
网友评论