我完全不理解这个过程。我已经能够导航到Java SDK中包含keytool的文件夹。但是我一直收到“openssl未被识别为内部或外部命令”的错误信息。问题在于,即使我能让它工作,接下来我该做什么?使用什么工具?
以下是你需要做的-
从此处下载OpenSSL。
解压缩后,在C:/中创建一个名为OpenSSL的文件夹,将解压缩后的代码复制到此处。
检测debug.keystore文件路径。如果没找到,请在C:/中搜索并在下一步命令中使用该路径。
检测keytool.exe路径并进入该目录,然后在命令提示符中运行以下命令(需写成1行)-
$ keytool -exportcert -alias androiddebugkey -keystore "C:\Documents and Settings\Administrator.android\debug.keystore" | "C:\OpenSSL\bin\openssl" sha1 -binary |"C:\OpenSSL\bin\openssl" base64
它会要求输入密码,请输入android,这样就可以获得一个key-hash。
android
。 - jamapag适用于 Linux 和 Mac
打开终端:
对于调试构建
keytool -exportcert -alias androiddebugkey -keystore debug.keystore | openssl sha1 -binary | openssl base64
您可以在“.android”文件夹中找到debug.keystore。将其复制并粘贴到桌面上,然后运行上述命令。
对于发布版本
keytool -exportcert -alias <aliasName> -keystore <keystoreFilePath> | openssl sha1 -binary | openssl base64
注意:请确保在这两种情况下都要求输入密码。如果不要求输入密码,则说明命令中有问题。 debug.keystore 的密码是 "android",而对于发布版本,您必须输入在创建密钥库时设置的密码。
keytool -exportcert -alias <aliasName> -keystore <keystoreFilePath>
命令,以查看是否一切正常。此外,当使用管道时,keytool 处于非交互模式,并在您输入密码时以明文显示密码。因此,最好编写一个小脚本来分别运行这些命令。 - Pierre请尝试这个:
public static void printHashKey(Context pContext) {
try {
PackageInfo info = pContext.getPackageManager().getPackageInfo(pContext.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.i(TAG, "printHashKey() Hash Key: " + hashKey);
}
} catch (NoSuchAlgorithmException e) {
Log.e(TAG, "printHashKey()", e);
} catch (Exception e) {
Log.e(TAG, "printHashKey()", e);
}
}
您可以在浏览器控制台中使用一行JavaScript将十六进制地图密钥转换为Base64。在最新的浏览器中打开控制台(Windows上按F12,macOS上按⌥ Option+⌘ Command+I,Linux上按Ctrl+⇧ Shift+I),然后粘贴代码并替换Google Play在发布 设置 应用签名下提供的SHA-1
、SHA-256
十六进制地图:
> btoa('a7:77:d9:20:c8:01:dd:fa:2c:3b:db:b2:ef:c5:5a:1d:ae:f7:28:6f'.split(':').map(hc => String.fromCharCode(parseInt(hc, 16))).join(''))
< "p3fZIMgB3fosO9uy78VaHa73KG8="
您也可以在此进行转换;运行以下代码片段,粘贴十六进制地图键并点击转换按钮:
document.getElementById('convert').addEventListener('click', function() {
document.getElementById('result').textContent = btoa(
document.getElementById('hex-map').value
.split(':')
.map(hc => String.fromCharCode(parseInt(hc, 16)))
.join('')
);
});
<textarea id="hex-map" placeholder="paste hex key map here" style="width: 100%"></textarea>
<button id="convert">Convert</button>
<p><code id="result"></code></p>
如果您想要反转密钥哈希以进行检查和验证:
> atob('p3fZIMgB3fosO9uy78VaHa73KG8=').split('').map(c => c.charCodeAt(0).toString(16)).join(':')
< "a7:77:d9:20:c8:1:dd:fa:2c:3b:db:b2:ef:c5:5a:1d:ae:f7:28:6f"
document.getElementById('convert').addEventListener('click', function() {
document.getElementById('result').textContent = atob(document.getElementById('base64-hash').value)
.split('')
.map(c => c.charCodeAt(0).toString(16))
.join(':')
});
<textarea id="base64-hash" placeholder="paste base64 key hash here" style="width: 100%"></textarea>
<button id="convert">Convert</button>
<p><code id="result"></code></p>
OpenSSL:如果您的操作系统没有预装它(例如,Windows没有预装它),则必须安装它。如何安装取决于您的操作系统(对于Windows,请查看coder_For_Life22提供的link)。
如果您使用的是Windows操作系统,则最简单的方法是将openssl.exe二进制文件复制到您的keytool路径中,而无需进行任何调整。如果您不想这样做,则必须将其添加到您的PATH
环境变量中。然后执行文档中提供的命令。
keytool -exportcert -alias androiddebugkey -keystore ~/.android/debug.keystore | openssl sha1 -binary | openssl base64
请注意,在-keystore
参数后面的参数指向您的调试密钥库。该位置还取决于您的操作系统。应该在以下位置之一:
如果您做得没错,会提示您输入密码。对于调试证书,密码为android
。如果密码正确,控制台将打印出哈希值(一些随机字符和数字)。
将其复制到Facebook应用程序首选项中的android key hash
字段中。要到达那里,请转到developers.facebook.com/apps,选择您的应用程序,进入编辑设置
并向下滚动。之后,请等待几分钟以使更改生效。
这里是完整的详情(适用于Windows)
1. 根据您的系统32位或64位,下载OpenSSL的第三个或第四个版本(搭配 e 更好)。
2. 将下载的zip文件解压缩到C目录中。
3. 打开提取的文件夹并复制路径,应该类似于C:\openssl-0.9.8k_X64\bin\openssl
(在末尾添加 \openssl)。
4. (获取JDK的bin文件夹路径,如果您知道如何忽略此步骤。)
打开Android Studio 项目结构(Ctrl + Alt + Shift + S),选择左侧面板中的 SDK 位置,复制 JDK 位置并添加 /bin。
因为您可能像我一样使用嵌入式 JDK,所以我们正在遵循此方法来获取 JDK 位置。
现在您已经拥有 OpenSSL 位置和 JDK 位置。
5. 现在我们需要调试密钥存储位置,为此打开 C~>用户~>您的用户名~>.android 文件夹,应该有一个名为 debug.keystore 的文件,现在复制路径位置,应该类似于
C:\Users\Redman\.android\debug.keystore
6. 现在打开命令提示符并输入命令。
cd YourJDKLocationFromStep4
就我的情况而言
cd "C:\Program Files\Android\Android Studio\jre\bin"
7. 现在构建以下命令
keytool -exportcert -alias androiddebugkey -keystore YOURKEYSTORELOCATION | YOUROPENSSLLOCATION sha1 -binary | YOUROPENSSLLOCATION base64
在我的情况下,该命令看起来像:
keytool -exportcert -alias androiddebugkey -keystore "C:\Users\Redman\.android\debug.keystore" | "C:\openssl-0.9.8k_X64\bin\openssl" sha1 -binary | "C:\openssl-0.9.8k_X64\bin\openssl" base64
现在在命令提示符中输入此命令,如果您做对了所有步骤,将会要求您输入密码(密码为android)。
Enter keystore password: android
就是这样,你会得到密钥哈希值,只需复制并使用它。
要构建已签名的KeyHash,请执行以下命令
keytool -exportcert -alias YOUR_ALIAS_FOR_JKS -keystore YOUR_JKS_LOCATION | YOUROPENSSLLOCATION sha1 -binary | YOUROPENSSLLOCATION base64
输入您的密钥库密码,如果您输入错误的密码,则会给出错误的KeyHash
注意:
如果由于某种原因在某个路径上出现错误,则将该路径括在双引号中。此外,Windows PowerShell对我来说不起作用,我使用了git bash(或使用命令提示符)。
示例
keytool -exportcert -alias androiddebugkey -keystore "C:\Users\Redman\.android\debug.keystore" | "C:\openssl-0.9.8k_X64\bin\openssl" sha1 -binary | "C:\openssl-0.9.8k_X64\bin\openssl" base64
要在本地计算机上生成您的密钥哈希,请使用Java的keytool实用程序(应该在控制台的路径中)针对Android调试密钥库运行。这是默认情况下在您的主目录.android目录中。在OS X上运行:
要在本地计算机上生成您的密钥哈希,请使用Java的keytool实用程序(应该在控制台的路径中)针对Android调试密钥库运行。这是默认情况下在您的主目录.android目录中。在OS X上运行:
keytool -exportcert -alias androiddebugkey -keystore ~/.android/debug.keystore | openssl sha1 -binary | openssl base64
在 Windows 上,使用以下命令:
keytool -exportcert -alias androiddebugkey -keystore %HOMEPATH%\.android\debug.keystore | openssl sha1 -binary | openssl base64
希望这能对你有所帮助
参考 - Facebook开发者网站
还有一个简短的解决方案。只需在您的应用程序中运行此代码:
FacebookSdk.sdkInitialize(getApplicationContext());
Log.d("AppLog", "key:" + FacebookSdk.getApplicationSignature(this));
不需要 FB SDK 的较长解决方案(基于此处的一个解决方案):
public static void printHashKey(Context context) {
try {
final PackageInfo info = context.getPackageManager().getPackageInfo(context.getPackageName(), PackageManager.GET_SIGNATURES);
for (android.content.pm.Signature signature : info.signatures) {
final MessageDigest md = MessageDigest.getInstance("SHA");
md.update(signature.toByteArray());
final String hashKey = new String(Base64.encode(md.digest(), 0));
Log.i("AppLog", "key:" + hashKey + "=");
}
} catch (Exception e) {
Log.e("AppLog", "error:", e);
}
}
结果应以 "=" 结尾。
步骤1->在您的系统中打开命令提示符
步骤2->C:\Program Files\Java\jdk1.6.0_43\bin>
步骤3->keytool -list -v -keystore C:\Users\leon\.android\debug.keystore -alias androiddebugkey -storepass android -keypass android
您将得到SHA1值,点击此链接将SHA1值转换为哈希密钥
我百分之百确定这个链接会对您有所帮助
keytool -exportcert -alias androiddebugkey -keystore ~/.android/debug.keystore | openssl sha1 -binary | openssl base64
在Windows上,请使用:keytool -exportcert -alias androiddebugkey -keystore %HOMEPATH%\.android\debug.keystore | openssl sha1 -binary | openssl base64
- Rakesh