> For the complete documentation index, see [llms.txt](https://docs.innopaas.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.innopaas.com/whatsapp-chan-pin/editor/ling-jie-chu-yan-zheng-ma/wei-android-sms-retriever-api-zheng-que-sheng-cheng-ha-xi-mi-yao.md).

# 为 Android SMS Retriever API 正确生成哈希密钥

众所周知，**Android SMS Retriever API**在当今的 Android 应用中占据主导地位。您可以通过以下链接了解更多信息。Google [**SMS Retriever API**](https://developers.google.com/identity/sms-retriever/overview)

根据 Android SMS Retriever API，每条消息都应遵循特定格式，其中必须包含“​**一次性代码**​”和“ ​**11 个字符的哈希字符串**​”，如下所示

```bash
您的验证码：123456
FA+9qCX9VSu
```

此代码 ( **​FA+9qCX9VSu)​**是用于唯一标识应用程序的 11 个字符哈希码。根据密钥库文件的不同，同一应用程序的调试版本、发布版本和 Play 商店版本的密钥会有所不同。

在本文中，我们将介绍如何在 react-native 中为&#x200B;***调试版本***&#x200B;、***发布版本***&#x548C;***Play 商店版本***&#x751F;成所需的哈希键。为了生成哈希键，Google 提供了一个脚本来从密钥库文件中获取哈希键。

[SMS\_RETRIEVER\_HASH\_KEY\_GENERATOR](https://github.com/googlearchive/android-credentials/blob/master/sms-verification/bin/sms_retriever_hash_v9.sh)

将其保存到.sh 文件。

## 1）对于调试版本

如果您正在使用 react-native 库“ [**react-native-sms-retriever-api**](https://github.com/Rajat421//react-native-sms-retriever-api#readme) ”，则有一种方法可以获取 debug.keystore 的哈希码。

> ```bash
> getHash():Promise<string[]>
> ```
>
> *获取应添加到消息末尾的应用程序的哈希码。这只是一次性过程。*

但在这里我们将了解如何使用 cmd 来完成工作。

首先找到应用程序的 debug.keystore 文件并复制一份，将其放在您保存 sms\_retriever\_hash\_v9.sh 文件的位置。然后使用以下命令检索应用程序调试版本的哈希密钥。

```bash
./sms_retriever_hash_v9.sh — 包“com.your.packagename” — 密钥库 /path/to/debug.keystore
```

这将返回调试哈希码

```bash
前8个字节经过base64编码：FA+9qCX9VSu
SMS 检索器哈希码：FA+9qCX9VSu
```

## 2）对于发布版本

首先生成您的 upload.keystore 文件。

*控制台*

转到*C:\Program Files\Java\jdkx.x.x\_x\bin 并运行以下命令*

```bash
keytool -genkeypair -v -keystore upload.keystore -alias​ my-key-alias -keyalg RSA -keysize 2048 -validity 10000
```

这将提示输入密钥库文件的密码。输入密码并确保记住该密码以备将来使用。

*Mac*&#x200B;***系统***

首先找到 JDK 的位置\*，然后运行以下命令导航到路径\*

cd /你的/jdk/路径

然后使用以下命令并以**sudo**权限生成上传密钥库文件，并确保记住您输入的密码。

```bash
sudo keytool -genkey -v -keystore upload.keystore -alias​ my-key-alias -keyalg RSA -keysize 2048 -validity 10000
```

现在您的 upload.keystore 文件已经准备好了，您可以按照方法 1 进行相同操作来生成 11 个字符的哈希码。

```bash
./sms_retriever_hash_v9.sh — 包“com.your.packagename” — 密钥库 /path/to/upload.keystore
```

> &#x200B;***注意***&#x200B;\*— 通过使用此功能，您可以检索哈希密钥。您可以在发布版本中使用它，但是当您将 .aab 文件或 apk 文件上传到 Playstore 时，此哈希码将不起作用，并且一次性代码不会从您的应用程序中选取。在这种情况下，您必须遵循不同的方法来实现这一点。\*

## 3）针对 Play 商店发布

登录到您的 Play 控制台并转到您的应用。然后选&#x62E9;***Release->Setup->App Signing***

然后您可以在右上角看到下载证书链接，如下图所示

![](https://rkzav3pcv4.feishu.cn/space/api/box/stream/download/asynccode/?code=Njg1ZDYxMDQzOTljZmNjZjBmZmVlMTA3OTIzMjQzZTJfODJpTFBDdGxxWDZ2NEM1RWk4dlFlZmpQY2xmT3psYkNfVG9rZW46QkdrWmJMclFEb1hRb254aWk3RGN6aHk0blNnXzE3ODgzNDQzNTk6MTc4ODM0Nzk1OV9WNA\&add_watermark=true\&scene_type=CCM)

这将下载一个名为“ ***deployment\_cert.der*** ”的文件，您不能直接使用它来生成哈希码。首先，您必须使用以下命令生成 .jks 文件

```bash
keytool -importcert -alias​ <用于生成 JKS 文件的别名> -file deploy_cert.der -keystore certificate.jks -storepass < ​JKS 文件的密码>
```

然后会提示“**信任此证书？\[否]：** ”消息，并提供“​**是**​”作为答案。然后您的证书将被添加到密钥库，您可以找到生成的文件“ ***certificate.jks”。***

现在，作为最后一步，您可以使用 certificate.jks 文件和以下命令。

```bash
keytool -exportcert -alias <用于生成 JKS 文件的别名> -keystore certificate.jks | xxd -p | tr -d "[:space:]" | echo -n <软件包名称> `cat` | shasum -a 256 | tr -d "[:space:]-" | xxd -r -p | base64 | cut -c1-11
```

然后会提示输入生成.jks文件的存储密码，输入密码就可以得到哈希码了。

```bash
输入密钥库密码：   < ​JKS 文件的密码>
```

现在你终于可以得到哈希码了，如下所示

```bash
FA+9qCX9VSu
```

本文介绍了如何生成上传密钥库文件、如何获取部署\_cer 文件以及如何生成 .jks 文件。本文到此结束。

[原文地址](https://prishanmaduka.medium.com/generate-hash-keys-properly-for-android-sms-retriever-api-c26b9be42ddc)
