【问题标题】:Openssl is not recognized as an internal or external commandOpenssl 未被识别为内部或外部命令
【发布时间】:2023-06-02 07:36:02
【问题描述】:

我希望为我的应用程序生成一个应用程序签名,该应用程序稍后将与 Facebook 集成。在 Facebook 的一个教程中,我发现了这个命令:

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

在教程中,它说通过运行这个 cmd,我的生成签名的过程将开始。

但是,这个命令会报错:

openssl is not recognized as an internal or external command

我怎样才能摆脱这个?

【问题讨论】:

  • 下载安装OpenSSL.
  • 我下载了3个,没有一个是兼容的:/
  • 这是什么意思,khurram?
  • 我从你提供的链接下载了许多版本的 openssl,但每个版本在安装前都给出了一个错误,它与 Windows 7-64 位不兼容。你能告诉我我需要的确切 openssl 吗
  • 您可以从我在下面的 ans 中发布的链接中获取它...

标签: java android facebook-android-sdk keytool


【解决方案1】:

好吧,在 OpenSSL 的位置……你必须把你下载的 OpenSSL 文件夹的路径。您的实际命令应如下所示:

keytool -exportcert -alias androiddebugkey -keystore ~/.android/debug.keystore | "C:\Users\abc\openssl\bin\openssl.exe" sha1 -binary | "C:\Users\abc\openssl\bin\openssl.exe" base64

请记住,您输入的路径将是您安装 OpenSSL 的路径。

编辑:

您可以从下面的相应链接下载适用于 windows 32 和 64 位的 OpenSSL:

OpenSSL for 64 Bits

OpenSSL for 32 Bits

【讨论】:

  • 它说 c:\openssl\bin\openssl 无法识别
  • 更好的方法是从 openssl/bin 目录执行原始命令。即如果我的 openssl 目录在 C:dev 中,我将移动到 C:\dev\openssl\bin,并按原样执行命令
  • 你应该指出openssl.exe文件:exportcert -alias androiddebugkey -keystore ~/.android /debug.keystore | "C:\openssl\bin\openssl.exe" sha1 -binary | "C:\openssl\bin\open enssl.exe" base64
  • @LatentBoy 是的,你是对的。你的方式对我有用。非常感谢。
  • 谢谢...尝试了大约一个小时后,您的回答对我有用
【解决方案2】:

这对我来说很成功。

"C:\Program Files\Java\jdk1.6.0_26\bin\keytool.exe" -exportcert -alias sociallisting -keystore "D:\keystore\SocialListing" | "C:\cygwin\bin\openssl.exe" sha1 -binary | "C:\cygwin\bin\openssl.exe" base64

注意以下路径:

  • “C:\Program Files\Java\jdk1.6.0_26\bin\keytool.exe”
  • “D:\keystore\SocialListing” 也可以是这样的“C:\Users\Shaon.android\debug.keystore
  • "C:\cygwin\bin\openssl.exe" 或者可以这样C:\Users\openssl\bin\openssl.exe

如果命令成功运行,那么您将看到此命令:

输入密钥库密码:typeyourpassword

加密哈希键**

【讨论】:

    【解决方案3】:

    对于那些寻找更新位置来安装 windows 二进制版本的 openssl(32 位和 64 位)的用户,您可以在此处找到它:

    http://slproweb.com/products/Win32OpenSSL.html

    提供二进制分发的网站的最新列表在这里

    http://www.openssl.org/related/binaries.html

    【讨论】:

      【解决方案4】:

      使用整个路径,像这样:

      exportcert -alias androiddebugkey -keystore ~/.android
      /debug.keystore | "C:\openssl\bin\openssl.exe" sha1 -binary | "C:\openssl\bin\op
      enssl.exe" base64
      

      它对我有用。

      【讨论】:

        【解决方案5】:

        我使用了这个代码:

        这对我来说很成功。

        "C:\Program Files\Java\jdk1.6.0_26\bin\keytool.exe" -exportcert -alias sociallisting -
        keystore "D:\keystore\SocialListing" | "C:\cygwin\bin\openssl.exe" sha1 -binary | 
        "C:\cygwin\bin\openssl.exe" base64
        

        【讨论】:

          【解决方案6】:

          请按照以下步骤操作,希望您的密钥正常工作:

          1. 第 1 步您将需要 OpenSSL。您可以从 Google Code 上的 openssl-for-windows 项目下载二进制文件。

          2. 第二步解压文件夹,然后将bin文件夹的路径复制到剪贴板。

            例如,如果文件解压到位置C:\Users\gaurav\openssl-0.9.8k_WIN32,则复制路径C:\Users\gaurav\openssl-0.9.8k_WIN32\bin

          3. 步骤 3 将路径添加到您的系统环境路径。设置好PATH 环境变量后,打开 cmd 并输入以下命令:

            C:\>keytool -exportcert -alias androiddebugkey -keystore [path to debug.keystore] | openssl sha1 -binary | openssl base64
            

            出现提示时输入您的密码。如果该命令有效,那么您将看到一个密钥。

          【讨论】:

          • 仅供参考:通常 debug.keystore 密码只是“android”。
          • 最好在系统环境变量中添加路径
          【解决方案7】:

          不保证使用这种单一的 openssl 方法生成 hashkey 会起作用。 如果它对我不起作用。但是感谢您给我一个解决问题的方向。

          保证解决方案: 您需要将整个命令分解为单独的命令,并且必须将每次执行的输出写入文件中。

          您可以从以下链接获取帮助:

          http://www.helloandroid.com/tutorials/using-facebook-sdk-android-development-part-1

          享受:)

          【讨论】:

            【解决方案8】:

            使用它对我有用。请更改您的路径

            C:\Program Files\Java\jre7\bin keytool -exportcert -alias androiddebugkey -keystore "C:\Users\Ace.android\debug.keystore" | "C:\openssl\bin

            \openssl.exe" sha1 -binary | "C:\openssl\bin\openssl.exe" base64

            【讨论】:

            【解决方案9】:

            首先在 cmd 中导航到您的 Java/jre/bin 文件夹 cd c:\Program Files (x86)\Java\jre7\bin

            然后使用:[将 debug.keystore 路径更改为系统上的正确位置] 在 c:\openssl 安装 openssl(对于 windows 32 或 64,根据您的需要)

            keytool -exportcert -alias androiddebugkey -keystore "C:\Users\vibhor\.android\debug.keystore" | "c:\openssl\bin\openssl.exe" sha1 -binary | "c:\openssl\bin\openssl.exe" base64
            

            所以整个命令是这样的:[执行时提示输入密钥库密码]

            c:\Program Files (x86)\Java\jre7\bin>keytool -exportcert -alias androiddebugkey
            -keystore "C:\Users\vibhor\.android\debug.keystore" | "c:\openssl\bin\openssl.ex
            e" sha1 -binary | "c:\openssl\bin\openssl.exe" base64
            Enter keystore password:
            

            【讨论】:

              【解决方案10】:

              进入cmd中的bin文件夹路径,然后运行以下命令

              keytool -exportcert -alias androiddebugkey -keystore %HOMEPATH%\.android\debug.keystore | openssl sha1 -binary | openssl base64
              

              你会得到你的密钥哈希

              【讨论】:

                【解决方案11】:

                对于 Windows 用户,从 google 的代码库 https://code.google.com/p/openssl-for-windows/downloads/list 下载 open ssl

                下载后,将内容解压到你的 c: 驱动器中的一个文件夹中。

                然后更新您的 PATH 环境变量,以便您可以从命令行中的任何位置使用 .exe。

                [windows 8]要更新你的PATH环境变量,点击我的电脑->属性->高级系统设置。

                单击“高级”选项卡并单击对话框底部的“环境变量”按钮,然后单击“编辑”从“系统变量”部分中选择路径条目。

                将解压出来的openssl下载的bin文件夹的路径粘贴到,点击确定。

                您需要关闭并打开您之前启动的命令提示符,以便加载更新的路径设置。

                现在运行这个命令:

                keytool -exportcert -alias androiddebugkey -keystore "C:\Users\Oladipo.android\debug.keystore" | openssl sha1 -二进制 | openssl base64

                您应该会看到开发者密钥。

                【讨论】:

                  【解决方案12】:
                  Steps to create Hash Key. 
                  1: Download openssl from Openssl for Windows . I downloaded the Win64 version 
                  2:Unzip and copy all the files in the bin folder including openssl.exe(All file of bin folder) 
                  3:Goto to the folder where you installed JDK for me it’s C:\Program Files\Java\jdk1.8.0_05\bin 
                  4:Paste all the files you copied from Openssl’s bin folder to the Jdk folder. 
                  

                  然后转到 C:\Program Files\Java\jdk1.8.0_05\bin 并按 shift 键并右键单击并打开 cmd

                  C:\Program Files\Java\jdk1.8.0_05\bin>//cmd path 
                  

                  这是Sha1过去的
                  keytool -exportcert -alias androiddebugkey -keystore "C:\User\ABC\.android.keystore" | openssl sha1 -二进制 | openssl base64
                  //而ABC是系统名放自己的系统名

                  【讨论】:

                  • 第二步你指的是什么bin文件夹?
                  【解决方案13】:

                  这是迟到的答案,但它会帮助像我这样的懒人..将此代码添加到您的应用程序类中,无需下载 openssl 也无需设置路径..只需复制此代码..并且keyHash会在log中生成。

                  import com.facebook.FacebookSdk;
                  public class MyApplication extends Application {
                  
                      @Override
                      public void onCreate() {
                          super.onCreate();
                          FacebookSdk.sdkInitialize(getApplicationContext());
                          AppEventsLogger.activateApp(this);
                          printKeyHash();
                      }
                  
                      private void printKeyHash() {
                          try {
                              PackageInfo info = getPackageManager().getPackageInfo(
                                      getPackageName(), PackageManager.GET_SIGNATURES);
                              for (Signature signature : info.signatures) {
                                  MessageDigest md = MessageDigest.getInstance("SHA");
                                  md.update(signature.toByteArray());
                                  Log.i("KeyHash:",
                                          Base64.encodeToString(md.digest(), Base64.DEFAULT));
                              }
                          } catch (PackageManager.NameNotFoundException e) {
                              Log.e("jk", "Exception(NameNotFoundException) : " + e);
                          } catch (NoSuchAlgorithmException e) {
                              Log.e("mkm", "Exception(NoSuchAlgorithmException) : " + e);
                          }
                      }
                  }
                  

                  不要忘记在清单中添加 MyApplication 类:

                  <application
                          android:name=".MyApplication"
                  </application>
                  

                  【讨论】:

                  • 这适用于 facebook 的发布版本吗?如果不是怎么办?
                  • 此代码用于生成keyhash。并且它的发布键也是相同的。对于发布版本,请确保您在 facebook 开发者控制台中设置公共访问权限。
                  • 在上面的代码中使用时出现错误“context and applicationId must be non-null”。 @SagarChavada
                  【解决方案14】:

                  下载和解压

                  您可以从下面的相应链接下载适用于 windows 32 和 64 位的 openssl:

                  https://code.google.com/archive/p/openssl-for-windows/downloads

                  64 位 OpenSSL 32 位 OpenSSL

                  keytool -exportcert -alias androiddebugkey -keystore %HOMEPATH%\.android\debug.keystore | **"C:\Users\keshav.gera\openssl-0.9.8k_X64\bin**\openssl.exe" sha1 -binary | **"C:\Users\keshav.gera\openssl-0.9.8k_X64\bin**\openssl.exe" base64
                  

                  重要在此处更改我们的路径以及在您的系统中安装 open ssl

                  毫无疑问,它的工作原理

                  C:\Users\keshav.gera>keytool -exportcert -alias androiddebugkey -keystore %HOMEPATH%\.android\debug.keystore | "C:\Users\keshav.gera\openssl-0.9.8k_X64\bin\openssl.exe" sha1 -binary | "C:\Users\keshav.gera\openssl-0.9.8k_X64\bin\openssl.exe" base64
                  

                  输入密钥库密码:android

                  **ZrRtxw36xWNYL+h3aJdcCeQQxi0=**
                  

                  ================================================ ===============

                  通过编码手动使用

                  import android.content.pm.PackageInfo;
                  import android.content.pm.PackageManager;
                  import android.content.pm.Signature;
                  import java.security.MessageDigest;
                  import java.security.NoSuchAlgorithmException;
                  
                  
                  private void PrintHashKey() {
                  
                          try {
                              PackageInfo info = getPackageManager().getPackageInfo("**com.keshav.patanjalidemo  Your Package Name Here**", PackageManager.GET_SIGNATURES);
                              for (Signature signature : info.signatures) {
                                  MessageDigest md = MessageDigest.getInstance("SHA");        
                                  md.update(signature.toByteArray());
                                  Log.d("KeyHash:", Base64.encodeToString(md.digest(), Base64.DEFAULT));
                              }
                          } catch (PackageManager.NameNotFoundException e) {
                              e.printStackTrace();
                          } catch (NoSuchAlgorithmException e) {
                              e.printStackTrace();
                          }
                  
                      }
                  

                  【讨论】:

                    【解决方案15】:

                    这对我有用:

                    C:\Users\example>keytool -exportcert -alias androiddebugkey -keystore 
                    "C:\Users\example\.android" | "C:\openssl\bin\openssl.exe" sha1 -binary 
                    | "C:\openssl\bin\oenssl.exe" base64
                    

                    【讨论】:

                      【解决方案16】:

                      IDK 如果这与此处相关,但如果您安装了 Git,您可以在“C:\Program Files\Git\usr\bin”中找到 openssl,您可以在终端中使用该位置作为密钥库命令.

                      哦,是的,命令:

                      keytool -exportcert -alias keystore -keystore "C:\Users\YOURPATH/filename.jks" | "C:\Program Files\Git\usr\bin\openssl" sha1 -binary | "C:\Program Files\Git\usr\bin\openssl" base64

                      【讨论】:

                      • 这工作..谢谢你
                      【解决方案17】:

                      对于那些像我现在一样迷路的人,请关注 Usama Sarwar 的回应 但如果:

                      "your_openssl_path/bin/openssl.exe"

                      不行,试试看

                      your_openssl_path/bin/openssl.exe.

                      没有引号。

                      "c:\openssl\bin\openssl.exe" => 不适合我

                      c:\openssl\bin\openssl.exe => 为我工作

                      【讨论】:

                        【解决方案18】:

                        我今天也遇到了同样的问题,通过观看此视频(SSL 安装)解决了它 - https://www.youtube.com/watch?v=PoAc1lpfK8I&ab_channel=GleyGames

                        然后,我使用 Usamas 命令并运行它(在更改命令中的路径之后),我使用 CMD 从 java 安装内的 bin 文件夹中运行它。

                        对我有用的完整命令:

                        (来自 C:\Program Files\Java\jdk-11.0.12\bin)

                        keytool -exportcert -alias androiddebugkey -keystore "C:\Users\USERNAME\.android\debug.keystore" | "C:\Program Files\OpenSSL-Win64\bin\openssl" sha1 -binary | "C:\Program Files\OpenSSL-Win64\bin\openssl" base64
                        

                        【讨论】: