有一个随机密钥来通过 AES 加密本地凭据,我正在按照以下教程尝试安全地存储该密钥,然后能够在以后解密:
nelenkov.blogspot.co.uk 在 android 中存储应用程序机密
本教程解释了如何访问系统密钥库并将密码存储在其中。
我面临的问题集中在调用UNLOCK ( android.credentials.UNLOCK ) KeyStore 上。未初始化 KeyStore 的设备(目前 API 低于 14),它们会显示一个对话框,要求输入 8 位密码。
本教程运行良好,但是显示此对话框甚至只显示一次,它会打扰大多数用户。
有什么办法可以跳过这个对话框吗?
如果有人描述了一种在本地保留密钥的更好方法,我会更高兴。
用户在 SD 卡上保存了一个 .p12 文件(例如他的 S/MIME 证书)。我想将此证书(或提取的私钥和公钥)加载到 AndroidKeyStore 中。
File file = new File(pathToP12File);
Certificate c = null; // TODO: convert file into something I can load into the keystore
KeyStore ks = KeyStore.getInstance("AndroidKeyStore");
ks.load(null);
ks.setCertificateEntry("myCertAlias", c);
Run Code Online (Sandbox Code Playgroud)
将文件转换为可以在密钥库中设置为证书条目的最佳方法是什么?
我正在尝试访问我的密钥库,因为我需要获取 SHA1 指纹以生成发布的 Google Maps Api 密钥:google map docs
当尝试在命令行上输入我的密钥(或复制和粘贴它)时,我得到以下信息:
keytool error: java.io.IOException: Keystore was tampered with, or password was incorrect
现在,如果我进入 Android Studio 并选择“生成签名的 APK”,它会询问我的密钥库密码,如果我输入它,(连同别名和别名通行证)我可以单击完成并开始构建一个版本APK(当然它失败了,因为如上所述,我需要一个 Google Maps发布密钥而不是调试密钥。)
因此,我知道它必须是正确的密码,但我仍然收到此错误。有没有其他人经历过这种情况?可能的原因是什么,解决方法是什么?
我有一个单独的密钥库(JKS),其中包含许多用于不同应用程序的密钥条目/别名.现在,一个应用程序将被移动到另一个开发人员,我想为他导出/提取单个键/别名.
> keytool.exe -list -keystore Keystorefile
Keystore-type: JKS
Keystore-provider: SUN
Keystore contains 6 entries
Appname1, 01.07.20XX, PrivateKeyEntry,
certificate-Fingerprint (SHA1): AA:BB:CC:DD:EE:FF:GG:HH:II:JJ:KK:LL:MM:NN:OO:PP:Q
Q:RR:SS:TT
Appname2, 29.05.20XX, PrivateKeyEntry,
certificate-Fingerprint (SHA1): AA:BB:CC:DD:EE:FF:GG:HH:II:JJ:KK:LL:MM:NN:OO:PP:Q
Q:RR:SS:TT
Appname3, 30.09.20XX, PrivateKeyEntry,
certificate-Fingerprint (SHA1): AA:BB:CC:DD:EE:FF:GG:HH:II:JJ:KK:LL:MM:NN:OO:PP:Q
Q:RR:SS:TT
Appname4, 18.02.20XX, PrivateKeyEntry,
certificate-Fingerprint (SHA1): AA:BB:CC:DD:EE:FF:GG:HH:II:JJ:KK:LL:MM:NN:OO:PP:Q
Q:RR:SS:TT
Appname5, 09.08.20XX, PrivateKeyEntry,
certificate-Fingerprint (SHA1): AA:BB:CC:DD:EE:FF:GG:HH:II:JJ:KK:LL:MM:NN:OO:PP:Q
Q:RR:SS:TT
Appname6, 11.02.20XX, PrivateKeyEntry,
certificate-Fingerprint (SHA1): AA:BB:CC:DD:EE:FF:GG:HH:II:JJ:KK:LL:MM:NN:OO:PP:Q
Q:RR:SS:TT
Run Code Online (Sandbox Code Playgroud)
这是我的Keystore的输出,现在我只想导出Key for Appname2.如果可能的话,这可以在另一个Keystore中导入.
谢谢!
Android 密钥库系统可保护密钥材料免遭未经授权的使用。首先,Android 密钥库通过防止从应用程序进程和整个 Android 设备中提取密钥材料,减少了在 Android 设备外部未经授权使用密钥材料的情况。其次,Android KeyStore 通过让应用程序指定其密钥的授权使用,然后在应用程序进程之外强制执行这些限制,从而减少 Android 设备上未经授权使用密钥材料的情况。
我无法完全理解它。
通过防止从应用程序流程中提取关键材料
我输入以下内容
keytool -genkey -v -keystore debug.keystore -storepass android -alias androiddebugkey -keypass android -keyalg RSA -keysize 2048 -validity 10000
Run Code Online (Sandbox Code Playgroud)
在cmd中生成调试keytool.
但是,我收到了错误
java.io.filenotfoundexception:debug.keystore"而不是.之后我将上面的命令更改为"keytool -genkey -v -keystore C:\ Users\me.android\debug.keystore -storepass android -alias androiddebugkey -keypass android -keyalg RSA -keysize 2048 -validity 10000
而这次我收到了另一个错误
javalang.exception:未生成密钥对,别名已存在
这里出了什么问题?我在这里尝试做的只是生成一个新的调试密钥库.
我在 Android Studio 的终端上尝试了这个命令:
keytool -list -v -alias androiddebugkey -keystore "C:\Users\Shehar Yar Khan\.android\debug.keystore"
Run Code Online (Sandbox Code Playgroud)
但无法输入密码。事实上,键盘卡在终端上(在命令提示符上也是如此),但在 Chrome 和其他应用程序上运行良好。因此,我尝试按“Enter”键,这就是我看到的:
***************** WARNING WARNING WARNING *****************
* The integrity of the information stored in your keystore *
* has NOT been verified! In order to verify its integrity, *
* you must provide your keystore password. *
***************** WARNING WARNING WARNING *****************
Alias name: androiddebugkey
Creation date: Mar 3, 2019
Entry type: PrivateKeyEntry
Certificate chain length: 1
Certificate[1]:
Owner: C=US, O=Android, CN=Android Debug …Run Code Online (Sandbox Code Playgroud) 从 android 11 开始,setUserAuthenticationValidityDurationSeconds 已被弃用,取而代之的是 KeyGenParameterSpec.Builder 中的 setUserAuthenticationParameters,但接缝处对以前的版本有任何支持。
那么,最好的解决方案是什么?
KeyGenParameterSpec.Builder builder = new KeyGenParameterSpec.Builder(...)
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.R)
builder.setUserAuthenticationParameters(timeout, KeyProperties.AUTH_DEVICE_CREDENTIAL | KeyProperties.AUTH_BIOMETRIC_STRONG);
else
//noinspection deprecation
builder.setUserAuthenticationValidityDurationSeconds(timeout);
Run Code Online (Sandbox Code Playgroud)
这个?
security android android-keystore android-biometric-prompt android-biometric
我正在尝试为Android安装React Native应用.但经过签名步骤和运行后./gradlew assembleRelease,我app-release-unsigned.apk在apk文件夹中只是一个孤独.没有错误.没有警告.
一切似乎都很好,除了没有输出.
这是我之前构建的应用程序,并且在Play商店中,因此我知道密钥库是有效的,并且签名是好的.我最近没有评论过原生的反应 - 到v0.40 - 所以一定要搞砸了.
有谁知道我可能会开始调试这个?
我在制作签名的apk时遇到问题,一直说无法找回密钥。密钥库工作正常,它正在生成SHA密钥并显示密钥别名,当我输入错误的密码时,它将显示错误的验证码。制作新的密钥库时会生成签名的APK,但我想使用相同的密钥库在Google Play上更新我的应用。
我被卡在里面了,请帮助我。
android-keystore ×10
android ×9
java ×2
keystore ×2
aes ×1
cmd ×1
code-signing ×1
credentials ×1
debugging ×1
encryption ×1
jks ×1
react-native ×1
security ×1