Cipher.init () с допустимым ключом из Android -магазина клавиш бросает ошибку несовместимости ключейJAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Cipher.init () с допустимым ключом из Android -магазина клавиш бросает ошибку несовместимости ключей

Сообщение Anonymous »

В моем Kivy 2.3.1, Buildozer 1.5.0, P4A 2024.01.21, Python 3.11.16 На macOS есть кусок кода для безопасного сохранения локально. The Cipher.init () продолжает отбрасывать следующую ошибку: < /p>
06-16 23:04:22.981 10822 10973 I python : Save failed: Invalid instance of 'javax/crypto/SecretKey' passed for a 'java/security/cert/Certificate'
< /code>
Вот строка кода в save (), которая вызывает ошибку: < /p>
cipher.init(Cipher.ENCRYPT_MODE, secret_key)
< /code>
Согласно Java doc, шифр может быть инициализирован так же простой, как указано выше. Попробовал довольно несколько способов init, и все они бросают одну и ту же ошибку несоответствия типа. Утверждается, что ключ сгенерирован успешно и хранится в магазине ключей Android. Ключ - следующее: < /p>
06-17 23:43:02.559 5820 5898 I python : [DEBUG] SecretKey class: jnius.reflect.keystore2.AndroidKeyStoreSecretKey
06-17 23:43:02.559 5820 5898 I python : [DEBUG] SecretKey algorithm: AES
06-17 23:43:02.559 5820 5898 I python : [DEBUG] SecretKey format: None
< /code>
вот полный код: < /p>
android_secure_store.py
from jnius import autoclass, cast
import base64
import json
from kivy.storage.jsonstore import JsonStore

# Android & Java classes
KeyStore = autoclass("java.security.KeyStore")
KeyGenerator = autoclass("javax.crypto.KeyGenerator")
Cipher = autoclass("javax.crypto.Cipher")
GCMParameterSpec = autoclass("javax.crypto.spec.GCMParameterSpec")
KeyGenParameterSpecBuilder = autoclass("android.security.keystore.KeyGenParameterSpec$Builder")
KeyProperties = autoclass("android.security.keystore.KeyProperties")
PythonActivity = autoclass("org.kivy.android.PythonActivity")

# Constants
KEY_ALIAS = "KivyAppSecretKey"
TRANSFORMATION = "AES/GCM/NoPadding"
STORE_FILE = "secure_store.json"

class AndroidSecureStore:
def __init__(self):
self.context = PythonActivity.mActivity
self.store = JsonStore(STORE_FILE)
self.keystore = KeyStore.getInstance("AndroidKeyStore")
self.keystore.load(None)

if not self.keystore.containsAlias(KEY_ALIAS):
self._generate_key()

def _generate_key(self): ##

Подробнее здесь: https://stackoverflow.com/questions/796 ... ey-incompa
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «JAVA»