Хранение и восстановление PrivateKey

162
29 июня 2022, 09:10

Задача: после генерации PrivateKey обеспечить его хранение и дальнейшее восстановление для подписания документов и проверки созданных с его помощью цифровых подписей.

Создаю пару ключей:

        // Создать пару ключей:
        btnKeyPair.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                try {
                    KeyPairGenerator keyGen = KeyPairGenerator.getInstance("DSA");
                    keyGen.initialize(2048);
                    pair = keyGen.generateKeyPair();
                    PublicKey publicKey = pair.getPublic();
                    PrivateKey privateKey = pair.getPrivate();
                    
                    // Сохранение ключей (в данном случае сохраняю приватный ключ в виде String 
                    // в Shared Preferences.
                } catch (Exception e) {
                    Toast.makeText(MainActivity.this, e.toString(), Toast.LENGTH_LONG).show();
                }
            }
        });

Восстановление приватного ключа из String (privateKeyString):

byte[] pk = privateKeyString.getBytes();
KeyFactory keyFactory=KeyFactory.getInstance("DSA");
PrivateKey privateKey=keyFactory.generatePrivate(new PKCS8EncodedKeySpec(pk));

Получаю ошибку: "encoded key spec not recognized: failed to construct sequence from byte[]: DEF length 111 object truncated by 29"

Вопросы:

  1. С чем это связано и что здесь можно сделать?
  2. Можно ли (и если да, то как) сохранить в Shared Preferences объект класса PrivateKey?
  3. Можно ли сохранить PrivateKey в SQLite (пытался сохранить в Blob, но студия требует преобразовать blob в byte[])?

P.S. Использовать KeyStore не хотелось бы, т.к., насколько я понимаю, не на всех устройствах оно работает корректно.

READ ALSO
Stream api filter

Stream api filter

Всем привет!) Столкнулась с проблемой

191
Организация тестов в многомодульном проекте

Организация тестов в многомодульном проекте

Доброго времени)) Имеется модуль AВ нем в тестовых директориях лежат тестовые сущности (не тесты)

143
Какой Сервер выбрать для Java

Какой Сервер выбрать для Java

Пытаюсь изучать разработку web приложений на JavaПопробовал TomCat, с ним проблем не возникло, вот только это не полноценный сервер, а хотелось...

331
java.lang.IllegalArgumentException: argument "content" is null

java.lang.IllegalArgumentException: argument "content" is null

Выпрыгивает ошибка javalang

422