java.security.GeneralSecurityException CryptoCipher when using Apache Crypto Commons - java

I'm attempting to use the code here for encryption https://commons.apache.org/proper/commons-crypto/xref-test/org/apache/commons/crypto/examples/CipherByteArrayExample.html. I copied the code word-for-word and I am not sure why I'm getting this exception as I can't find much on the issue. The only part that I changed was "StandardCharsets.UTF_8" to the String "UTF-8." I am also not interested in using Bouncy Castle or the java JCE as alternatives but am open to other libraries that use AES/DES in CBC/ECB modes (I am aware of the dangers of DES/ECB so no need for the lecture). Thank you.
EDIT:
Stack trace (Note that line 62 of Crypto.java is "CryptoCipher encipher=Utils.getCipherInstance(transform, properties) ):
W/System.err: java.io.IOException: java.security.GeneralSecurityException: CryptoCipher {org.apache.commons.crypto.cipher.OpenSslCipher} is not available or transformation AES/CBC/PKCS5Padding is not supported.
at org.apache.commons.crypto.utils.Utils.getCipherInstance(Utils.java:130)
at com.example.me.cryptotest.Crypto.test(Crypto.java:62)
at com.example.me.cryptotest.MainActivity.onCreate(MainActivity.java:43)
at android.app.Activity.performCreate(Activity.java:7009)
at android.app.Activity.performCreate(Activity.java:7000)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1214)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2731)
W/System.err:
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2856)
at android.app.ActivityThread.-wrap11(Unknown Source:0)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1589)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:164)
at android.app.ActivityThread.main(ActivityThread.java:6494)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)
Caused by: java.security.GeneralSecurityException: CryptoCipher {org.apache.commons.crypto.cipher.OpenSslCipher} is not available or transformation AES/CBC/PKCS5Padding is not supported.
at org.apache.commons.crypto.cipher.CryptoCipherFactory.getCryptoCipher(CryptoCipherFactory.java:176)
at org.apache.commons.crypto.utils.Utils.getCipherInstance(Utils.java:128)
... 15 more
W/System.err: Caused by: java.lang.RuntimeException: java.lang.reflect.InvocationTargetException
at org.apache.commons.crypto.utils.ReflectionUtils.newInstance(ReflectionUtils.java:90)
at org.apache.commons.crypto.cipher.CryptoCipherFactory.getCryptoCipher(CryptoCipherFactory.java:160)
... 16 more
Caused by: java.lang.reflect.InvocationTargetException
at java.lang.reflect.Constructor.newInstance0(Native Method)
at java.lang.reflect.Constructor.newInstance(Constructor.java:334)
W/System.err:
at org.apache.commons.crypto.utils.ReflectionUtils.newInstance(ReflectionUtils.java:88)
... 17 more
Caused by: java.lang.RuntimeException: java.lang.RuntimeException: no native library is found for os.name=Linux and os.arch=x86
at org.apache.commons.crypto.cipher.OpenSslCipher.<init>(OpenSslCipher.java:59)
... 20 more
Caused by: java.lang.RuntimeException: no native library is found for os.name=Linux and os.arch=x86
at org.apache.commons.crypto.NativeCodeLoader.findNativeLibrary(NativeCodeLoader.java:120)
at org.apache.commons.crypto.NativeCodeLoader.loadLibrary(NativeCodeLoader.java:62)
at org.apache.commons.crypto.NativeCodeLoader.<clinit>(NativeCodeLoader.java:50)
at org.apache.commons.crypto.NativeCodeLoader.isNativeCodeLoaded(NativeCodeLoader.java:261)
at org.apache.commons.crypto.Crypto.isNativeCodeLoaded(Crypto.java:84)
W/System.err: at org.apache.commons.crypto.cipher.OpenSsl.<clinit>(OpenSsl.java:94)
at org.apache.commons.crypto.cipher.OpenSsl.getLoadingFailureReason(OpenSsl.java:114)
at org.apache.commons.crypto.cipher.OpenSslCipher.<init>(OpenSslCipher.java:57)
... 20 more

I see your problem here:
java.lang.RuntimeException: no native library is found for os.name=Linux and os.arch=x86
Looks like you are not using Oracle JVM. Possible your JVM is reporting different os.arch string then standard Oracle JVM, so you need to copy the native library from possibly linux/i386 to linux/x86 (wild guess). Fire a google search on this error no native library is found for os.name=Linux and os.arch=x86, and playaround with your OS & JVM to help your runtime find the required native library(s).
Update:
If you look at the `README.md' of the project on github. You will notice this:
Portable across various operating systems (currently only Linux/MacOSX/Windows); Apache Commons Crypto loads the library according to your machine environment (it checks system properties, os.name and os.arch).
And this is the dll structure they have in the code,
so you can override your System property 'os.arch' to load the native library as per your OS:
System.setProperty("os.arch", "#folder")
Just for reference, I am running the code in Windows 10 with Oracle JDK8, so my derived path is coming to /org/apache/commons/crypto/native/Windows/x86_64/commons-crypto.dll
Hope this will provide you more help in resolving the issue.

Related

dlopen failed: cannot locate symbol "_ZN7android10VectorImpl19reservedVectorImpl1Ev"

I need help, cause I'm stucked for 2 days from now and i can't find anything.
I bought device: Kcosit V720 on aliexpress and they send me library with it, but it's so hard to get it work correctly.
While I was trying to load library, i had to download libcamera_client.so, because libbarcodereader.so needed it, so i don't know if it is compatible, but now, I'm receiving another error. Any ideas how to fix it ?:
2020-06-19 09:29:33.056 7239-7239/com.lukas.myapplication E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.lukas.myapplication, PID: 7239
java.lang.UnsatisfiedLinkError: dlopen failed: cannot locate symbol "_ZN7android10VectorImpl19reservedVectorImpl1Ev" referenced by "/data/app/com.lukas.myapplication-1/lib/arm/libbarcodereader.so"...
at java.lang.Runtime.loadLibrary0(Runtime.java:977)
at java.lang.System.loadLibrary(System.java:1530)
at com.lukas.myapplication.MainActivity.<clinit>(MainActivity.java:12)
at java.lang.Class.newInstance(Native Method)
at android.app.Instrumentation.newActivity(Instrumentation.java:1078)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2616)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2789)
at android.app.ActivityThread.-wrap12(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1527)
at android.os.Handler.dispatchMessage(Handler.java:110)
at android.os.Looper.loop(Looper.java:203)
at android.app.ActivityThread.main(ActivityThread.java:6251)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1063)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:924)
You are most likely missing another .so file. Ensure that all .so files are in the same directory.
The following may help to identify referenced .so files:
https://unix.stackexchange.com/questions/120015/how-to-find-out-the-dynamic-libraries-executables-loads-when-run
Update:
I'm not aware of any android API for this type of hardware. According to https://kcosit.com/kcosit-v720-p1496437.html your device contains most likely a OEM version of the SE4710 barcode scanner, manufactured by Motorola. It seems that there exists an SDK from Motorola but I could only find the corresponding documenation. It is most likely used as base for SDKs provided by OEM licensors. One of such an SDK is available here: https://developer.zebra.com/community/tools
Maybe you are lucky and you can use this SDK also for your device. If it should
also be compatible with your device you would of course also need to check license of the SDK - I haven't found any info yet. Maybe you are able to find a source for the original SDK from Motorolla or an other SDK from an OEM licensor.

W/System.err: java.io.IOException: Cannot run program "python": error=13, Permission denied

I'm trying to activate a python file (placed on my desktop) from android studio:
String command = "python /home/roye/Desktop/check.py";
Process p = Runtime.getRuntime().exec(command );
DataOutputStream outputStream = new DataOutputStream(p.getOutputStream());
it gives me this error:
W/System.err: java.io.IOException: Cannot run program "python": error=13, Permission denied
W/System.err: at java.lang.ProcessBuilder.start(ProcessBuilder.java:1050)
at java.lang.Runtime.exec(Runtime.java:695)
W/System.err: at java.lang.Runtime.exec(Runtime.java:525)
at java.lang.Runtime.exec(Runtime.java:422)
at com.example.myapplication.MainActivity$1.onClick(MainActivity.java:42)
at android.view.View.performClick(View.java:6608)
at android.view.View.performClickInternal(View.java:6585)
W/System.err: at android.view.View.access$3100(View.java:785)
at android.view.View$PerformClick.run(View.java:25919)
at android.os.Handler.handleCallback(Handler.java:873)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:201)
W/System.err: at android.app.ActivityThread.main(ActivityThread.java:6810)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:547)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:873)
W/System.err: Caused by: java.io.IOException: error=13, Permission denied
at java.lang.UNIXProcess.forkAndExec(Native Method)
at java.lang.UNIXProcess.<init>(UNIXProcess.java:133)
at java.lang.ProcessImpl.start(ProcessImpl.java:132)
at java.lang.ProcessBuilder.start(ProcessBuilder.java:1029)
... 15 more
I can really use some help, thank you!
I think the way, you run Python in android is wrong. there are some ways you can use it.
Chaquopy
a plugin for Android Studio’s Gradle-based build system.Chaquopy enables you to freely intermix Java and Python in your app, using whichever language is best for your needs
Kivy
a cross-platform OpenGL-based user interface toolkit. You can run Kivy applications on Android, on (more or less) any device with OpenGL ES 2.0 (Android 2.2 minimum).Kivy APKs are normal Android apps that you can distribute like any other, including on stores like the Play store
Pyqtdeploy
a tool for deploying PyQt applications. It supports deployment to desktop platforms (Linux, Windows and OS X) and to mobile platforms (iOS and Android).
Termux
an Android terminal emulator and Linux environment app that works directly with no rooting or setup required. A minimal base system is installed automatically
for details, you can see this wiki chart

java.lang.NoClassDefFoundError: org.jumpmind.symmetric.io.stage.StagingManager$1, even though the class exists in the jar file

I am trying to integrate Symmetric-Android 3.10.2 in my Android application. It is showing
java.lang.NoClassDefFoundError:
org.jumpmind.symmetric.io.stage.StagingManager$1
Even the class exists in jarfile
I have upgraded my API level from 22 to 26 after reading article from
https://sourceforge.net/p/symmetricds/discussion/1354726/thread/f965364c00/
but the issue remains
java.lang.NoClassDefFoundError:
org.jumpmind.symmetric.io.stage.StagingManager$1
at org.jumpmind.symmetric.io.stage.StagingManager.(StagingManager.java:288)
at org.jumpmind.symmetric.android.AndroidSymmetricEngine.createStagingManager(AndroidSymmetricEngine.java:108)
at org.jumpmind.symmetric.AbstractSymmetricEngine.init(AbstractSymmetricEngine.java:348)
at org.jumpmind.symmetric.android.AndroidSymmetricEngine.(AndroidSymmetricEngine.java:84)
at org.jumpmind.symmetric.android.SymmetricService.onStartCommand(SymmetricService.java:88)
at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:3944)
at android.app.ActivityThread.access$2300(ActivityThread.java:219)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1833)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:145)
at android.app.ActivityThread.main(ActivityThread.java:6939)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1404)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1199)
It sounds like your issue may not be related to SymmetricDS, but instead how your classpath is configured in this Android project. There are several solutions in this thread that might help

java.lang.UnsatisfiedLinkError: dlopen failed: library "libpthread.so.0" not found

Im trying to make an app for serial comminucation with android
im using rxtx library
Unfortunately i got a problem in my project
Thats my Logcat error :
java.lang.UnsatisfiedLinkError: dlopen failed: library "libpthread.so.0" not found
at java.lang.Runtime.loadLibrary0(Runtime.java:1016)
at java.lang.System.loadLibrary(System.java:1669)
at gnu.io.LibraryLoader.loadRxtxNative(LibraryLoader.java:32)
at gnu.io.CommPortIdentifier.<clinit>(CommPortIdentifier.java:118)
at gnu.io.CommPortIdentifier.getPortIdentifier(Unknown Source:0)
at com.example.pooya.myapplication.Connection.open(Connection.java:145)
at com.example.pooya.myapplication.MainActivity$1.onClick(MainActivity.java:37)
at android.view.View.performClick(View.java:6597)
at android.view.View.performClickInternal(View.java:6574)
at android.view.View.access$3100(View.java:778)
at android.view.View$PerformClick.run(View.java:25885)
at android.os.Handler.handleCallback(Handler.java:873)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:193)
at android.app.ActivityThread.main(ActivityThread.java:6669)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
i added the libpthread.so.0 file to my jnilibs (all subfolders) but the result is same.
please give me a hint to solve this problem
There is no libpthread.so on Android, all threading functions are handled by libc itself. It seems the RxTx library does not support the Android platform.
You can try porting it yourself or use another solution:
Android Things API
Android USB Host API
RxTx Android port (warning: last update 2011)
android-serialport-api (warning: last update 2011)
usb-serial-for-android (last update 2016)

Adding PubSub as a dependency causes errors with Firestore

I am fairly new to Android and the Google cloud. I have written a test app which successfully writes to a firestore database.
I wanted to extend my application by adding a feature to publish to a pubsub topic.
I added the following dependency line to build.gradle:
implementation 'com.google.cloud:google-cloud-pubsub:0.33.0-beta'
Before I even added any new pubsub code, my app builds, runs, and immediately crashes with the following stacktrace:
E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.tliv.mytestapp, PID: 27506
java.lang.RuntimeException: Internal error in Firestore (0.6.6-dev).
at com.google.android.gms.internal.zzeux.run(Unknown Source:23)
at android.os.Handler.handleCallback(Handler.java:790)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:164)
at android.app.ActivityThread.main(ActivityThread.java:6494)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)
Caused by: java.util.ServiceConfigurationError: Provider io.grpc.netty.NettyChannelProvider could not be instantiated: java.lang.ClassCastException: class io.grpc.netty.NettyChannelProvider cannot be cast to com.google.android.gms.internal.zzfmw
at com.google.android.gms.internal.zzfmw.zzq(Unknown Source:84)
at com.google.android.gms.internal.zzfmw.zzdcr(Unknown Source:26)
at com.google.android.gms.internal.zzfmw.<clinit>(Unknown Source:12)
at com.google.android.gms.internal.zzfmw.zzdcs(Unknown Source:0)
at com.google.android.gms.internal.zzfmv.zzud(Unknown Source:0)
at com.google.android.gms.internal.zzeti.<init>(Unknown Source:22)
at com.google.android.gms.internal.zzenf.zza(Unknown Source:74)
at com.google.android.gms.internal.zzenh.run(Unknown Source:8)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:457)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:301)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1162)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:636)
at com.google.android.gms.internal.zzeuu$zza.run(Unknown Source:7)
at java.lang.Thread.run(Thread.java:764)
Caused by: java.lang.ClassCastException: class io.grpc.netty.NettyChannelProvider cannot be cast to com.google.android.gms.internal.zzfmw
at java.lang.Class.asSubclass(Class.java:2469)
at com.google.android.gms.internal.zzfmw.zzq(Unknown Source:2)
at com.google.android.gms.internal.zzfmw.zzdcr(Unknown Source:26) 
at com.google.android.gms.internal.zzfmw.<clinit>(Unknown Source:12) 
at com.google.android.gms.internal.zzfmw.zzdcs(Unknown Source:0) 
at com.google.android.gms.internal.zzfmv.zzud(Unknown Source:0) 
at com.google.android.gms.internal.zzeti.<init>(Unknown Source:22) 
at com.google.android.gms.internal.zzenf.zza(Unknown Source:74) 
at com.google.android.gms.internal.zzenh.run(Unknown Source:8) 
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:457) 
at java.util.concurrent.FutureTask.run(FutureTask.java:266) 
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:301) 
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1162) 
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:636) 
at com.google.android.gms.internal.zzeuu$zza.run(Unknown Source:7) 
at java.lang.Thread.run(Thread.java:764) 
I'm not sure where to begin troubleshooting this. As soon as I remove the pubsub dependency, my code builds and runs fine again.
As per the doc, "Google Cloud Java client libraries do not currently support Android".
You may want to use the Google Cloud Pub/Sub API Client Library instead for your project.

Categories

Resources