15

我只是想要一些确认。

我在windows上开发

我正在尝试将 facebook 集成到应用程序中,并且 SDK 文档说我需要“导出签名”

从这里:http: //developers.facebook.com/docs/guides/mobile/#android

所以它说运行这个命令:

 keytool -exportcert -alias androiddebugkey -keystore ~/.android/debug.keystore | openssl sha1 -binary | openssl base64

首先我必须下载openssl:OpenSSL

现在上面的命令,我假设应该转换为:

"C:\path\to\java\keytool" -exportcert -alias your_alias -keystore "C:\path\to\your\keystore\keystore.name" | "C:\path\to\openssl_install\bin\openssl" sha1 -binary |"C:\path\to\openssl_install\bin\openssl" base64
  • 那么您想要安装在最新 Java 安装文件夹中的 keytool 吗?
  • 您希望别名是您在 eclipse 中用于正常 apk 创建的别名的名称吗?
  • 您希望密钥库成为您在导出 android 应用程序时使用的那个吗?
  • 您希望 openssl 成为您刚刚安装的那个

因此,一旦我完成此操作,它就会要求输入密码:(它会在我输入密码时显示密码)

如果我输入正确的密码,我会得到

'zR2tey1h9kqPRSW/yEYEr0ruswyD='(改为公开)

但是如果我输入了错误的密码,它仍然会以以下形式返回一个代码

'ga0RGNYHvTR5d3SVDEfpQQAPGJ1='?

所以,是的,只是在寻找确认我在做正确的事情,这是预期的输出

4

3 回答 3

12

获取哈希的最佳方法是运行以下代码:

try {
            PackageInfo info = getPackageManager().getPackageInfo(getPackageName(), PackageManager.GET_SIGNATURES);
            for (Signature signature : info.signatures) {
                MessageDigest md;

                    md = MessageDigest.getInstance("SHA");
                    md.update(signature.toByteArray());
                    String something = new String(Base64.encode(md.digest(), 0));
                    Log.e("hash key", something);
        } 
        }
        catch (NameNotFoundException e1) {
            // TODO Auto-generated catch block
            Log.e("name not found", e1.toString());
        }

             catch (NoSuchAlgorithmException e) {
                // TODO Auto-generated catch block
                 Log.e("no such an algorithm", e.toString());
            }
             catch (Exception e){
                 Log.e("exception", e.toString());
             }

使用 windows cmd、git bash 或 cygwing 终端提取哈希时,这三个工具给出不同的结果。

最准确的是上面的代码

于 2011-06-26T14:51:11.343 回答
1

是的,我认为您以正确的方式进行操作。我还执行此命令并将此哈希放入我的 fb 应用程序中,并且它可以正常工作。

于 2011-06-26T15:32:38.103 回答
0

在下面回答您的问题:

因此,一旦我完成此操作,它就会要求输入密码:(它会在我输入密码时显示密码)

如果我输入正确的密码,我会得到

'zR2tey1h9kqPRSW/yEYEr0ruswyD=' (更改为公开),但如果我输入的密码不正确,它仍然会返回一个代码形式为

'ga0RGNYHvTR5d3SVDEfpQQAPGJ1='?所以,是的,只是在寻找确认我在做正确的事情,这是预期的输出

keytool -exportcert -alias androiddebugkey -keystore ~/.android/debug.keystore | openssl sha1 -binary | openssl base64有三个命令将前面命令的输出提供给后面的命令。

  1. keytool -exportcert -alias androiddebugkey -keystore ~/.android/debug.keystore
  2. openssl sha1 -binary
  3. openssl base64

当给出不正确的密钥库密码时,第一个命令会生成错误,但不会显示,因为它将输入到第二个命令并生成不同的哈希。仅运行第一个 keytool 命令 ( keytool -exportcert -alias androiddebugkey -keystore ~/.android/debug.keystore) 以确认您的密钥库密码以及密码是否正确。如果密码不正确,将显示类似于下面的输出。

> keytool -exportcert -alias androiddebugkey -keystore 

~/.android/debug.keystore Enter keystore password:
keytool error: java.io.IOException: Keystore was tampered with, or password is wrong

如果生成了 android 调试哈希,则提供android来回答提示。Enter keystore password:android 调试密钥库的默认密码是android

命令也可以写入从 keytool 命令捕获错误,以查看命令 1 在运行命令 2 之前是否返回错误。

那么您想要安装在最新 Java 安装文件夹中的 keytool 吗?

您希望别名是您在 eclipse 中用于正常 apk 创建的别名的名称吗?

您希望密钥库成为您在导出 android 应用程序时使用的那个吗?

您希望 openssl 成为您刚刚安装的那个吗?

对以上所有问题都是肯定的。PATH可以设置为不键入 keytool 和 openssl 的完整路径。

于 2015-11-07T23:57:44.980 回答