Flutter获取SHA-1/SHA-256密钥时遇HmacPBESHA256算法异常
解决Flutter环境下获取SHA密钥时的HmacPBESHA256算法缺失问题
问题场景
在Flutter环境中执行以下命令获取SHA-1和SHA-256密钥:
keytool -list -v \ -alias androiddebugkey -keystore ~/.android/debug.keystore
执行后抛出异常:
keytool error: java.io.IOException: Integrity check failed: java.security.NoSuchAlgorithmException: Algorithm HmacPBESHA256 not available java.io.IOException: Integrity check failed: java.security.NoSuchAlgorithmException: Algorithm HmacPBESHA256 not available at java.base/sun.security.pkcs12.PKCS12KeyStore.engineLoad(PKCS12KeyStore.java:2167) at java.base/sun.security.util.KeyStoreDelegator.engineLoad(KeyStoreDelegator.java:222) at java.base/java.security.KeyStore.load(KeyStore.java:1479) at java.base/sun.security.tools.keytool.Main.doCommands(Main.java:1058) at java.base/sun.security.tools.keytool.Main.run(Main.java:405) at java.base/sun.security.tools.keytool.Main.main(Main.java:398) Caused by: java.security.NoSuchAlgorithmException: Algorithm HmacPBESHA256 not available at java.base/javax.crypto.Mac.getInstance(Mac.java:191) at java.base/sun.security.pkcs12.PKCS12KeyStore.engineLoad(PKCS12KeyStore.java:2145) ... 5 more
Flutter Doctor检测结果:
Doctor summary (to see all details, run flutter doctor -v): [!] Flutter (Channel stable, 3.7.12, on Deepin 20.9 5.15.77-amd64-desktop, locale en_US.UTF-8) ! Warning: `dart` on your path resolves to /usr/lib/dart/bin/dart, which is not inside your current Flutter SDK checkout at /home/vrs/flutter. Consider adding /home/vrs/flutter/bin to the front of your path. [✓] Android toolchain - develop for Android devices (Android SDK version 33.0.2) [✓] Chrome - develop for the web [✓] Linux toolchain - develop for Linux desktop [✓] Android Studio (version 2022.2) [✓] IntelliJ IDEA Community Edition (version 2023.1) [✓] VS Code (version 1.77.3) [✓] Connected device (2 available) [✓] HTTP Host Availability ! Doctor found issues in 1 category.
解决方案
1. 直接调用Android Studio内置的keytool
Android Studio自带的JDK包含完整的加密算法支持,无需额外配置:
- 找到Android Studio的JDK路径,Deepin系统下通常为
~/AndroidStudio/jbr/bin/ - 执行以下命令(输入默认密码
android即可):
~/AndroidStudio/jbr/bin/keytool -list -v -alias androiddebugkey -keystore ~/.android/debug.keystore
2. 将Android Studio JDK设置为系统默认
如果不想每次指定路径,可修改系统环境变量:
- 编辑
~/.bashrc或~/.zshrc配置文件,添加:
export JAVA_HOME=~/AndroidStudio/jbr export PATH=$JAVA_HOME/bin:$PATH
- 执行
source ~/.bashrc(对应自己的shell配置文件)使变更生效,之后直接运行原keytool命令即可。
3. 修复系统JDK的加密算法缺失(可选)
若坚持使用系统JDK,需确保安装完整版本:
- 检查当前JDK版本,避免使用精简版OpenJDK
- 安装完整的OpenJDK包:
sudo apt install openjdk-11-jre-headless
内容的提问来源于stack exchange,提问作者Vinayak Sutar
相关产品推荐
相关产品推荐

