i have asked chatgpt for way to keep my app sensitive data not exposed
and it gives keystore method with this code
but it gives this error which chatgpt really cant fix( i have tried many times)
Is that available in b4a and what is the code function to do that??
and it gives keystore method with this code
B4X:
Sub GenerateAndStoreKey
Dim ks As JavaObject
ks.InitializeStatic("java.security.KeyStore")
ks = ks.RunMethod("getInstance", Array("AndroidKeyStore"))
ks.RunMethod("load", Null) ' 🔥 التعديل هنا
Dim keyGen As JavaObject
keyGen.InitializeStatic("javax.crypto.KeyGenerator")
keyGen = keyGen.RunMethod("getInstance", Array("AES", "AndroidKeyStore"))
Dim purpose As Int = Bit.Or(1, 2) ' KeyProperties.PURPOSE_ENCRYPT | KeyProperties.PURPOSE_DECRYPT
Dim builder As JavaObject
builder.InitializeNewInstance("android.security.keystore.KeyGenParameterSpec$Builder", Array("MySecureKey", purpose))
Dim modes As Object = Array As String("GCM")
Dim paddings As Object = Array As String("NoPadding")
builder.RunMethod("setBlockModes", Array(modes))
builder.RunMethod("setEncryptionPaddings", Array(paddings))
builder.RunMethod("setKeySize", Array(256))
Dim spec As JavaObject = builder.RunMethod("build", Null)
keyGen.RunMethod("init", Array(spec))
keyGen.RunMethod("generateKey", Null)
End Sub
Sub GetSecretKey As JavaObject
Dim ks As JavaObject
ks.InitializeStatic("java.security.KeyStore")
ks = ks.RunMethod("getInstance", Array("AndroidKeyStore"))
ks.RunMethod("load", Null)
Dim key As JavaObject = ks.RunMethod("getKey", Array("MySecureKey", Null))
If key.IsInitialized Then
Return key
Else
Log("Key not found!")
Return Null
End If
End Sub
but it gives this error which chatgpt really cant fix( i have tried many times)
how b4a save data in keystore and retrieve from it??** Activity (main) Create (first time) **
main_vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv4 (java line: 848)
java.lang.RuntimeException: Method: load not matched.
at anywheresoftware.b4j.object.JavaObject.RunMethod(JavaObject.java:130)
at com.TS.main._vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv4(main.java:848)
at com.TS.main._activity_create(main.java:447)
at java.lang.reflect.Method.invoke(Native Method)
at anywheresoftware.b4a.BA.raiseEvent2(BA.java:221)
at com.TS.main.afterFirstLayout(main.java:111)
at com.TS.main.access$000(main.java:23)
at com.TS.main$WaitForLayout.run(main.java:89)
at android.os.Handler.handleCallback(Handler.java:942)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loopOnce(Looper.java:226)
at android.os.Looper.loop(Looper.java:313)
at android.app.ActivityThread.main(ActivityThread.java:8757)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:571)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1067)
Is that available in b4a and what is the code function to do that??