如何在android中存储客户机密钥

如何在android中存储客户机密钥,android,oauth-2.0,signature,Android,Oauth 2.0,Signature,我有一个API,我将从android应用程序调用它。身份验证使用oauth2,我有ressource所有者密码-flow。 因此,当我想要获得accesstoken时,我需要用户名、密码、clientId和clientSecret 我的问题是:如何在我的应用程序中存储clientSecret?我读到有人将其存储在字节中,并在需要时生成字符串。 我的想法是使用签名(SHA)作为客户机密。 所以我找到了这个函数: private String getKeyHash(String packagenam

我有一个API,我将从android应用程序调用它。身份验证使用oauth2,我有
ressource所有者密码
-flow。 因此,当我想要获得accesstoken时,我需要用户名、密码、clientId和clientSecret

我的问题是:如何在我的应用程序中存储clientSecret?我读到有人将其存储在字节中,并在需要时生成字符串。 我的想法是使用签名(SHA)作为客户机密。 所以我找到了这个函数:

private String getKeyHash(String packagename)
{
    String hash = "";
    try
    {
        PackageInfo info = getPackageManager().getPackageInfo(packagename,     PackageManager.GET_SIGNATURES);
        for (Signature signature : info.signatures)
        {
            MessageDigest md = MessageDigest.getInstance("SHA");
            md.update(signature.toByteArray());
            String sign= Base64.encodeToString(md.digest(), Base64.DEFAULT);
            Log.e("MY KEY HASH:", sign);
            Toast.makeText(getApplicationContext(),sign,     Toast.LENGTH_LONG).show();
        }
    }
    catch (PackageManager.NameNotFoundException e)
    {

    }
    catch (NoSuchAlgorithmException e)
    {

    }
    return hash;
}
哪种解决方案更好/最安全?
或者有更好的方法吗?

为什么不将其存储在
SharedReferences
或db中?只有你的应用程序才能访问它们。你到底想保护数据不受什么影响?如果是恶意应用,那么anil建议的SharedReferences是默认选项。如果是反逆向工程,你在应用程序中所做的任何事情都不会对你有帮助。我想确定我的应用程序。只有我的应用程序才允许使用API。因此,当你问我如何保护数据时。那么答案就是逆向工程。当我用签名作为秘密时,没有人能得到这个秘密,除非他有签名,不是吗?