我android.security.KeyStoreException: Unknown error在少数具有不同 Android 版本的设备上使用 (6 - 8)
这是我的密钥生成代码:
final KeyPairGenerator keyGenerator = KeyPairGenerator
.getInstance(KeyProperties.KEY_ALGORITHM_RSA,
ANDROID_KEY_STORE);
keyGenerator.initialize(new KeyGenParameterSpec.Builder(ALIAS,
KeyProperties.PURPOSE_ENCRYPT | KeyProperties.PURPOSE_DECRYPT)
.setKeySize(2048)
.setEncryptionPaddings(KeyProperties.ENCRYPTION_PADDING_RSA_PKCS1)
.build());
return keyGenerator.generateKeyPair();
Run Code Online (Sandbox Code Playgroud)
这就是我加载 keyPair 的方式:
if (keyStore.containsAlias(ALIAS))
{
KeyStore.Entry entry = keyStore.getEntry(ALIAS, null);
if (entry != null)
{
if (entry instanceof KeyStore.PrivateKeyEntry)
{
Log.i(TAG, "KeyPair found.");
KeyStore.PrivateKeyEntry pke = (KeyStore.PrivateKeyEntry) entry;
Certificate cert = pke.getCertificate();
if (cert != null)
{
return new KeyPair(cert.getPublicKey(), pke.getPrivateKey());
}
Log.w(TAG, "Cert / Public Key is null");
}
} …Run Code Online (Sandbox Code Playgroud) 我的图表看起来像这样
介质 - [:firstChapter] - >第1章 - [:下一页第] - > chapter2_to_N
只有一个节点通过:firstChapter连接,然后可以跟随几个节点,通过:nextChapter连接
我尝试匹配通过关系连接的所有节点:firstChapter到medium或通过:nextChapter从一个章节连接到另一个
我试过的查询看起来像这样
start n=node(543) match n-[:firstChapter|nextChapter*]->m return m;
Run Code Online (Sandbox Code Playgroud)
节点(543)是节点介质.令人惊讶的是,此查询返回路径中的所有节点,即使节点未连接到n(=中节点)如果我在nextChapter之后省略*符号,则仅返回具有:firstChapter关系的第一个节点(chapter1),这似乎是正确的.
start n=node(543) match n-[:firstChapter|nextChapter*]->m return m;
Run Code Online (Sandbox Code Playgroud)
为什么上面的查询返回没有连接到n的节点?据我所知,*符号通常会返回无限数量关系的节点,对吧?
匹配通过firstChapter或:nextChapter连接到起始节点的路径的所有节点(仅一次)的最佳方法是什么?在这种情况下所有章节
上面的查询是为了这个目的,但我不认为输出是正确的...
编辑:添加一个图表来澄清.正如你所看到的,第一章可能只能通过:firstChapter,所以仍然不清楚,为什么上面的查询返回所有章节点
