小编Fre*_*yhr的帖子

无法在Android密钥库中生成密钥

我们目前遇到的问题是,当用户安装我们的应用程序时,应用程序会尝试访问并在密钥库中生成密钥,但密钥库会抛出此异常:

Caused by: java.lang.IllegalStateException: could not generate key in keystore
        at android.security.AndroidKeyPairGenerator.generateKeyPair(AndroidKeyPairGenerator.java:100)
        at java.security.KeyPairGenerator$KeyPairGeneratorImpl.generateKeyPair(KeyPairGenerator.java:275)
Run Code Online (Sandbox Code Playgroud)

我们认为它与手机上的解锁模式有关,无法解锁密钥库,和/或设备管理员锁定密钥库.

这是密钥库的创建方式以及密钥的生成方式:

public SecretKeyWrapper(Context context, String alias) throws GeneralSecurityException, IOException {
    mCipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");
    final KeyStore keyStore = KeyStore.getInstance("AndroidKeyStore");
    keyStore.load(null);

    if (!keyStore.containsAlias(alias)) {
        generateKeyPair(context, alias);
    }

    final KeyStore.PrivateKeyEntry entry = (KeyStore.PrivateKeyEntry) keyStore.getEntry(alias, null);
    mPair = new KeyPair(entry.getCertificate().getPublicKey(), entry.getPrivateKey());
}

private static void generateKeyPair(Context context, String alias) throws GeneralSecurityException {
    final Calendar start = new GregorianCalendar();
    final Calendar end = new GregorianCalendar();
    end.add(Calendar.YEAR, 100);

    final KeyPairGeneratorSpec spec …
Run Code Online (Sandbox Code Playgroud)

java security android keystore android-keystore

22
推荐指数
1
解决办法
4498
查看次数

BackgroundWorker - 在RunWorkerCompleted中CancellationPending更改为false.为什么?

取消BackGroundWorker后,在DoWork中,CancellationPending为true,但当他进入RunWorkerCompleted时,CancellationPending为false.我不知道我做错了什么?

static BackgroundWorker b1;

static void Main(string[] args)
{
    b1=new BackgroundWorker();
    b1.DoWork += new DoWorkEventHandler(work1);
    b1.RunWorkerCompleted += new RunWorkerCompletedEventHandler(completed);
    b1.WorkerSupportsCancellation = true;
    b1.RunWorkerAsync("Hellow");
    Console.ReadLine();
}

private static void completed(object sender, RunWorkerCompletedEventArgs e)
{
    if (((BackgroundWorker)sender).CancellationPending)
        Console.WriteLine("Canceled!");
    else
        Console.WriteLine("Result:" + e.Result);//it goes here every time
}

private static void work1(object sender, DoWorkEventArgs e)
{
    ((BackgroundWorker)sender).CancelAsync();
    if (((BackgroundWorker)sender).CancellationPending)
    {
        e.Cancel = true;
    }
}
Run Code Online (Sandbox Code Playgroud)

顺便说一句,如何将DoWork中出现的错误添加到RunWorkerCompletedEventArgs.Error以便将其提供给用户?

c# backgroundworker

4
推荐指数
2
解决办法
5150
查看次数