thearhar Posted January 10, 2018 Report Share Posted January 10, 2018 Пытаюсь сделать приложение на андроид - обмен зашифрованными сообщениями с помощью ассимитричного ГОСТа, использую следующий код для шифрования: byte[] bmessage = message.getBytes(); InputStream crtstream = ctx.getAssets().open("user.crt"); int size = crtstream.available(); byte[] buffer = new byte[size]; crtstream.read(buffer); crtstream.close(); CertificateFactory factory = CertificateFactory.getInstance("X509"); Certificate certificate = factory.generateCertificate(new ByteArrayInputStream(buffer)); ByteArrayOutputStream cryptData = new ByteArrayOutputStream(); CMSEnvelopedDataOutputStreamR streamEncrypt = new CMSEnvelopedDataOutputStreamR(cryptData); streamEncrypt.init("GOST28147-89"); streamEncrypt.addRecipient((X509Certificate) certificate); streamEncrypt.write(bmessage, 0, bmessage.length); streamEncrypt.close(); return cryptData.toString(); message - String перед этим Получаю следующий exception java.lang.ClassNotFoundException: Unable to find class:ru.infotecs.cms.output.CMSEnvelopedDataOutputStream at ru.infotecs.crypto.proxy.Proxy.getClass(Proxy.java:240) at ru.infotecs.crypto.proxy.Proxy.<init>(Proxy.java:68) at ru.infotecs.cms.output.CMSEnvelopedDataOutputStreamR.<init>(CMSEnvelopedDataOutputStreamR.java:28) at me.sign.signme.Crypto.EncryptPKCS(Crypto.java:198) at me.sign.signme.MainActivity.testCrypto(MainActivity.java:50) at me.sign.signme.MainActivity.onCreate(MainActivity.java:73) at android.app.Activity.performCreate(Activity.java:6876) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1135) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3207) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3350) at android.app.ActivityThread.access$1100(ActivityThread.java:222) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1795) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:158) at android.app.ActivityThread.main(ActivityThread.java:7229) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120) at de.robv.android.xposed.XposedBridge.main(XposedBridge.java:134) я так понимаю, библиотека, предоставленная на https://infotecs.ru/downloads/all/vipnet-jcrypto-sdk.html не полная? в проект я подключил jcrypto-jca-android-2.6.1-R363770 и jcrypto-pkcs7-android-2.6.1-R363770 Quote Link to comment Share on other sites More sharing options...
thearhar Posted January 10, 2018 Author Report Share Posted January 10, 2018 подключаю следующим образом: allprojects { repositories { jcenter() google() flatDir { dirs 'libs' } } } implementation 'ru.infotecs:jcrypto-jca-android-2.6.1-R363770@aar' implementation 'ru.infotecs:jcrypto-pkcs7-android-2.6.1-R363770@aar' файлы библиотек лежат в app/libs импорт средствами студии (и в результате compile project(':jcrypto-pkcs7-android-2.6.1-R363770') ) дают тот же результат Quote Link to comment Share on other sites More sharing options...
Petrenko Sergey Posted January 11, 2018 Report Share Posted January 11, 2018 Чтобы решить проблему, необходимо в коде Android-приложения в методе onCreate сделать вызов DexLoader.load(context, “jcrypto-pkcs7.jar”); Из приведенного фрагмента кода не вполне ясно, где именно сделать этот вызов. Скорее всего здесь: me.sign.signme.MainActivity.onCreate. Quote Link to comment Share on other sites More sharing options...
thearhar Posted January 14, 2018 Author Report Share Posted January 14, 2018 Помогло добавление двух строчек: DexLoader.load(this, "jcrypto-jca.jar"); DexLoader.load(this, "jcrypto-pkcs7.jar"); Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.