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

Форум для тех, кто программирует под Android
Ответить Пред. темаСлед. тема
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-18 15:49:56.872 4851 4988 I python : Save failed: Invalid instance of 'javax/crypto/SecretKey' passed for a 'java/security/cert/Certificate'
06-18 15:49:56.873 4851 4988 I python : Traceback (most recent call last):
06-18 15:49:56.873 4851 4988 I python : File "/Users/macbook/Documents/code/py/vmonfront/.buildozer/android/app/lib/android_secure_store.py", line 101, in save
06-18 15:49:56.873 4851 4988 I python : File "jnius/jnius_export_class.pxi", line 1163, in jnius.JavaMultipleMethod.__call__
06-18 15:49:56.873 4851 4988 I python : File "jnius/jnius_export_class.pxi", line 871, in jnius.JavaMethod.__call__
06-18 15:49:56.873 4851 4988 I python : File "jnius/jnius_conversion.pxi", line 83, in jnius.populate_args
06-18 15:49:56.874 4851 4988 I python : File "jnius/jnius_utils.pxi", line 259, in jnius.check_assignable_from
06-18 15:49:56.874 4851 4988 I python : TypeError: 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 МБ.

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

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