【发布时间】:2017-10-17 05:11:42
【问题描述】:
我正在尝试使用 this gist 加密我的应用中的一些数据。
我已经用我的别名“Pablo”签署了我的 apk。 问题是试图运行这段代码:
public static String encrypt(String alias, String plaintext) {
try {
PublicKey publicKey = getPrivateKeyEntry(alias).getCertificate().getPublicKey();
Cipher cipher = getCipher();
cipher.init(Cipher.ENCRYPT_MODE, publicKey);
return Base64.encodeToString(cipher.doFinal(plaintext.getBytes()), Base64.NO_WRAP);
} catch (Exception e) {
throw new RuntimeException(e);
}
}
private static KeyStore.PrivateKeyEntry getPrivateKeyEntry(String alias) {
try {
KeyStore ks = KeyStore
.getInstance("AndroidKeyStore");
ks.load(null);
KeyStore.Entry entry = ks.getEntry(alias, null);
if (entry == null) {
Log.w(TAG, "No key found under alias: " + alias);
Log.w(TAG, "Exiting signData()...");
return null;
}
if (!(entry instanceof KeyStore.PrivateKeyEntry)) {
Log.w(TAG, "Not an instance of a PrivateKeyEntry");
Log.w(TAG, "Exiting signData()...");
return null;
}
return (KeyStore.PrivateKeyEntry) entry;
} catch (Exception e) {
Log.e(TAG, e.getMessage(), e);
return null;
}
}
但我得到了异常:“在别名下找不到密钥”
有什么想法吗?我必须输入与我的 jks 相同的别名,对吗?
谢谢!
【问题讨论】:
-
您是否尝试在命令行中列出密钥库别名?stackoverflow.com/a/12894334/1056359
-
是的,别名没问题,我正在使用签名 apk 调试它
-
异常发生在哪一行代码?确保您从运行应用程序的 jre 中使用正确的密钥库。使用的运行时 JRE 可能是不同的,包含不同的密钥库而没有您的别名。
-
在这部分代码中:KeyStore.Entry entry = ks.getEntry(alias, null);
-
我试图获取我的发行版 apk 并在我的设备上运行它,但 adb 工具却遇到了同样的错误