如何生成哈希签名?

How to generate hash signature?

我正在使用 twilio sdk 将短信验证与我的 android 应用程序集成,twilio 要求我注册我的应用程序的哈希签名,但生成哈希签名的方法都行不通,总是说它是无效的哈希签名 这是 twilio 想要哈希签名的路径

在您的 Activity onCreate() 中调用此方法并 使用密钥 "HashKey"

在 logcat 中搜索您的密钥
public static void printHashKey(Context pContext) {
    try {
        PackageInfo info = getPackageManager().getPackageInfo(getPackageName(), PackageManager.GET_SIGNATURES);
        for (Signature signature : info.signatures) {
            MessageDigest md = MessageDigest.getInstance("SHA");
            md.update(signature.toByteArray());
            String hashKey = new String(Base64.encode(md.digest(), 0));
            Log.d("HashKey", "printHashKey() Hash Key: " + hashKey);
        }
    } catch (NoSuchAlgorithmException e) {
        Log.e(TAG, "printHashKey()", e);
    } catch (Exception e) {
        Log.e(TAG, "printHashKey()", e);
    }
}

用户在 android studio 终端中的命令生成发布密钥哈希

keytool -exportcert -alias [aliasname] -keystore [your app keystore path] | openssl sha1 -binary | openssl base64

在您的项目中获取开发密钥哈希的代码下方

try {
    android.content.pm.PackageInfo info = getPackageManager().getPackageInfo(
            "com.apps.sonictonic",
            android.content.pm.PackageManager.GET_SIGNATURES);
    for (android.content.pm.Signature signature : info.signatures) {
        java.security.MessageDigest md = java.security.MessageDigest.getInstance("SHA");
        md.update(signature.toByteArray());
        android.util.Log.d("KeyHash", "KeyHash:" + android.util.Base64.encodeToString(md.digest(),
                android.util.Base64.DEFAULT));

    }
} catch (android.content.pm.PackageManager.NameNotFoundException e) {

} catch (java.security.NoSuchAlgorithmException e) {

}

如果您已将您的应用选择为 Google Play 托管签名,则您需要使用一组不同的步骤来获取正确的签名哈希。

How to configure Signature Hash with Google Play Signing · Issue #1550 · AzureAD/microsoft-authentication-library-for-android