国内App备案需要提供的公钥和签名:

安卓
第一步:下载Java Development Kit (JDK)和OpenSSL
- Java Development Kit (JDK):用于使用keytool创建签名密钥库
- OpenSSL:用于通过签名密钥库获取公钥和签名
Java Development Kit (JDK) 安装
安装好Java JDk后 要配置系统环境变量 打开控制面板,选择"系统和安全",然后选择"系统"。 点击"高级系统设置"。 在"系统属性"窗口中,点击"环境变量"。 在"系统变量"部分,找到并选择Path,然后点击"编辑"。 点击"新建"并添加JDK的bin目录路径,例如C:\Program Files\Java\jdk-11\bin。 点击"确定"保存更改。
OpenSSL 安装
注意:light、arm和默认版本的区别
默认版本适合开发人员使用;
light版本适合用户使用;
arm版本适合ARM 处理器上使用;
我们这里教程以win64默认版本的安装为例,使用exe安装
安装就是一路下一步即可
安装完成后需要配置环境变量:和Java JDk一样,将bin目录路径添加进系统变量的path中即可
第二步:创建签名密钥库
- 进入 flutter项目的 android/app 目录

-
在app目录打开PowerShell
-
使用命令创建密钥库文件
vbnet
keytool -genkey -v -keystore release-key.jks -keyalg RSA -keysize 2048 -validity 10000 -alias release-key
keytool:这是一个 Java 工具,用于管理密钥和证书。它通常与 Java Development Kit (JDK) 一起分发。
-genkey:这个选项表示生成一个密钥对(一个公钥和一个私钥),并创建一个自签名证书。
-v:启用详细输出。执行命令时,会显示生成密钥对和证书的详细信息。
-keystore release-key.jks:指定密钥库文件的名称。
-keyalg RSA:指定密钥对的算法。在这个例子中,使用 RSA 算法生成密钥对。
-keysize 2048:指定密钥的大小(以位为单位)。在这个例子中,密钥的大小是 2048 位。这是一个常见的密钥大小,提供了良好的安全性。
-validity 10000:指定证书的有效期(以天为单位)。在这个例子中,证书的有效期是 10,000 天,大约是 27 年。
-alias release-key:指定密钥对的别名。别名是一个用于标识密钥对的字符串。在这个例子中,别名是 release-key。
所以一般来说你需要修改的地方就是keystore 和alias的值,改成你的存储路径和文件名、改成你想要的别名
填写信息示例:
ini
输入密钥库口令: [设置密码,如 123456]
再次输入新口令: [重复密码]
您的名字与姓氏是什么? [开发者姓名]
您的组织单位名称? [公司/团队名]
您的组织名称? [公司全称]
您所在的城市或区域名称? [如 Beijing]
您所在的省/市/自治区名称? [如 Beijing]
该单位的双字母国家/地区代码? [CN]
将生成的
release-key.jks
文件保存在android/app/
目录下
检查密钥信息和删除密钥
arduino
// 检查密钥信息
keytool -list -v -keystore release-key.jks
// 删除密钥
del release-key.jks
获取公钥、签名等信息
先导出证书(PEM 格式)
vbnet
keytool -exportcert -alias "release-key" -keystore release-key.jks -file cert.pem -rfc
获取 MD5 签名/指纹(32位大写)
bash
openssl x509 -in cert.pem -noout -fingerprint -md5 | powershell -Command {
$input | ForEach-Object { $_ -replace 'MD5 Fingerprint=|:', '' }
}
获取 SHA1 签名/指纹
bash
openssl x509 -in cert.pem -noout -fingerprint -sha1 | ForEach-Object { $_ -replace 'SHA1 Fingerprint=|:', '' }
获取 SHA256 签名/指纹
bash
openssl x509 -in cert.pem -noout -fingerprint -sha256 | ForEach-Object { $_ -replace 'SHA256 Fingerprint=|:', '' }
获取公钥信息
Base64格式的
其他作用:
- 检查证书内容是否正确导出
- 检查是否包含完整的 -----BEGIN CERTIFICATE----- 和 -----END CERTIFICATE-----
- 确认文件编码是否被破坏
bash
type cert.pem
- 获取公钥(十六进制)
javascript
// 从证书中导出公钥
openssl x509 -in cert.pem -pubkey -noout > pubkey.pem
// 提取公钥 Modulus 并转为十六进制字符串
openssl rsa -pubin -in pubkey.pem -noout -modulus | ForEach-Object { $_ -replace 'Modulus=', '' }
更新项目配置
找到你的flutter项目,找到android/app/build.gradle文件,更新配置
java
android {
...
signingConfigs {
release {
keyAlias 'release-key' // 密钥别名
keyPassword '123456' // 密钥密码
storeFile file('release-key.jks') // 密钥库文件路径
storePassword '123456' // 密钥库密码
}
}