【问题标题】:keytool with Android Facebook SDK带有 Android Facebook SDK 的 keytool
【发布时间】:2011-09-22 23:54:29
【问题描述】:

我只是想要一些确认。

我在 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='?

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

【问题讨论】:

标签: java android facebook sdk keytool


【解决方案1】:

在下面回答您的问题:

所以一旦我这样做了,它会要求输入密码:(它显示密码 在我打字的时候)

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

'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 输入密钥库密码:
keytool 错误:java.io.IOException:密钥库被篡改,或密码被篡改 不正确

提供 android 回答Enter keystore password: 以提示是否生成了 android 调试哈希。 android 调试密钥库的默认密码是 android

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

因此,您需要在最新 Java 安装中安装的 keytool 文件夹?

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

您希望密钥库是您在导出 android 时使用的密钥库 应用?

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

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

【讨论】:

    【解决方案2】:

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

    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 终端提取哈希时,这三个工具给出不同的结果。

    最准确的是上面的代码

    【讨论】:

    • @Mina Base64 类的导入是什么?
    • 它包含在 Android 2.2 中,如果您在较低版本上运行,请针对 2.2 构建您的应用,运行代码并获取哈希,然后针对您的初始目标构建应用。
    • 嗯,现在我更加困惑了,因为这给了我一个与我使用问题方法得到的哈希码不同的哈希码
    • 是的,这很正常,尝试使用从 cmd 获得的哈希,您可能会收到无效密钥异常。检查此链接:p-xr.com/…
    • 但这就是问题所在,我将使用其他人的 facebook 开发页面,所以我想将我的哈希发送给他们一次,而不必担心我将不得不道歉并发送另一个。需要一个明确的答案来说明它们为何不同。
    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-04-21
      • 2020-12-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多