【问题标题】:Facebook SDK getting hash for app with Google Play SigningFacebook SDK 通过 Google Play 签名获取应用程序的哈希值
【发布时间】:2021-12-24 19:40:45
【问题描述】:

我需要从我的 Facebook SDK https://developers.facebook.com/quickstarts/?platform=android 应用签名中获取一些哈希

我们可以采用这种但旧的方式,因为 Facebook 似乎不知道该应用现在使用 Google Play 签名并且它是一个上传密钥库:

keytool -exportcert -alias MY_ALIAS_NAME -keystore MY_PATH_TO_KEYSTORE_FILE | openssl sha1 -二进制 | openssl base64

所以我找到了这个答案https://stackoverflow.com/a/54682874/7767664,它建议使用 SHA1 并使用 http://tomeko.net/online_tools/hex_to_base64.php 进行转换

但我使用上传密钥的 SHA1 以及来自 Facebook keytool -exportcert -alias UPLOAD_KEY_ALIAS_NAME -keystore PATH_TO_UPLOAD_KEYSTORE_FILE | openssl sha1 -binary | openssl base64 的转换器网站和解决方案测试了此解决方案,结果不同!完全不一样

这是什么意思?为什么结果不一样?

所以我可以从 Google Play 控制台网站复制 SHA1 以获得所需的应用程序,但我不能使用 http://tomeko.net/online_tools/hex_to_base64.php,因为它与使用 keystore 和 openssl 命令的工作方式不同

【问题讨论】:

    标签: android sha1 keytool android-facebook


    【解决方案1】:

    几年前我遇到了和你一样的问题,所以我编写了一个单独的 .java 工具,通过提供 SHA1 来生成 Facebook SDK base64 字符串。

    我不记得我当时尝试了什么。这是我所做的:

    1/ 创建文件:SHA1ToBase64Converter.java

    import java.util.Base64;
    import java.lang.IllegalArgumentException;
    
    
    public final class SHA1ToBase64Converter {
        public static void main(String[] args) {
            System.out.println("--------------------------------------------");
            
            if (args == null || args.length < 1) {
                System.out.println("Convert failed");
                throw new IllegalArgumentException("No SHA1 string is provided in the parameter");
            }
    
            String[] sha1Components = args[0].split(":");
            byte[] sha1 = new byte[sha1Components.length];
            for (int i = 0; i < sha1.length; ++i) {
                sha1[i] = (byte) (Integer.parseInt(sha1Components[i], 16) & 0xff);
            }
    
            System.out.println("Convert successful");
            System.out.println("Base64 string: " + Base64.getEncoder().encodeToString(sha1));
        }   
    }
    

    使用已安装的 javac 运行上述文件:

    javac SHA1ToBase64Converter.java
    java SHA1ToBase64Converter {{ SHA1 copied from PlayStore }}
    

    2/ 或者另一种选择是运行您的项目并让它为您运行代码:

    // This same code can be used in an Android project if you haven't installed javac or java command line
    // Place this somewhere in your code and wait for the Log result
    
    String[] sha1Components = YOUR_SHA1_STRING.split(":");
    byte[] sha1 = new byte[sha1Components.length];
    for (int i = 0; i < sha1.length; ++i) {
        sha1[i] = (byte) (Integer.parseInt(sha1Components[i], 16) & 0xff);
    }
    
    Log.d("FBBase64KeyTag", Base64.encodeToString(sha1, Base64.NO_WRAP));
    

    【讨论】:

      【解决方案2】:

      似乎 facebook 文档完全错误,因为在 Windows 10 上使用 keytool -exportcert -alias MY_ALIAS_NAME -keystore MY_PATH_TO_KEYSTORE_FILE | openssl sha1 -binary | openssl base64 命令时,它将生成 32 大小的 base64 字符串,但 facebook 仅接受 28 大小的哈希

      似乎http://tomeko.net/online_tools/hex_to_base64.php 是正确的,它会生成 28 大小的 base64 字符串

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-12-01
        • 2011-09-14
        • 2011-08-24
        • 1970-01-01
        • 2017-10-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多