java.io.IOException。在Android项目的Maven构建中运行ProGuard时,无法处理类。
我使用一个名为ITEXT的库将新信息写入现有PDF.为了加密PDF,Itext(对于Android)使用一个名为Spongycastle的库,该库是Bouncycastle的Android港口.不幸的是,Itext和Spongycastle都包含大量方法(15k+).在Android中,您可以使用的方法数量(64K)是一个困难的限制.幸运的是,Itext在海绵状罐子中不使用很多类. 我能够解压缩海绵状罐子,然后删除Itext不使用的所有类并重新拉紧文件. 一切都很好,直到我在Maven构建中运行Proguard才能产生最终的APK.我得到以下对我没有意义的IOException. 您在解决此错误方面的帮助将不胜感激. 预先感谢您.我还包括了参考Bouncycastle的proguard.cfg的部分. -keep class org.bouncycastle.crypto.** {*;} [DEBUG] Reading program jar [.m
2 2024-04-03
编程技术问答社区
如何解决安卓上海绵城堡的错误:找不到java.awt.datatransfer.DataFlavor类
我使用lib海绵状城堡根据 /* Add BC */ Security.addProvider(new BouncyCastleProvider()); /* Open the keystore */ KeyStore keystore = KeyStore.getInstance("PKCS12", "SC"); keystore.load(new FileInputStream(pkcs12Keystore), password.toCharArray()); Certificate[] chain = keystore.getCertificateChain(keyalias); /* Get the private key to sign the message with */ PrivateKey privateKey = (PrivateKey) keystore.getKey(keyalias, password.toCharArray()); /* Create the
6 2024-04-03
编程技术问答社区
强度无限的Jce和Android
我正在使用Spongycastle(Bouncycastle的Crypto函数的完整实现),并且我有一个BKS,其中包含尺寸384的键正如您将在密钥库中的任何键.但是我遇到的是错误 java.security.UnrecoverableKeyException: no match. 进行一点研究表明,这可能是因为关键大小太大了,无法处理Android,这很有意义,因为我的程序获得了大小128和256的其他键,没问题.通常,在Java中,这将通过将"无限强度" JCE导入Java安全文件夹来解决,但是Android呢?我可以将无限的力量JCE导入Android(我的直觉是否),如果没有,是否有关于如何提取钥匙的建议? Spongycastle解决了我的许多其他问题,我希望这里也有一个海绵状解决方案. 谢谢! 解决方案 因此,经过大量的搏斗,我发现了问题. 我没有指定提供商,因此我的程序默认为默认的Android Bouncycastle.我做的那一刻
0 2024-04-03
编程技术问答社区
在安卓系统上加载时,Spongycastle缺少许多算法
在此stackoverflow答案中,您可以看到一个代码,以打印所有可用的提供商和相应的算法:如何找出我的JVM支持什么算法[加密]? 我正在使用最新版本的SpongyCastle,当我要求在Android上获得Spongycastle(" SC")算法时,我只会得到一些算法.实际上,我得到了这个非常有限的列表: provider: SC algorithm: PBEWITHMD5ANDDES algorithm: PBEWITHSHA256AND192BITAES-CBC-BC algorithm: OLDHMACSHA384 algorithm: PBEWITHHMACSHA algorithm: PBEWITHMD5ANDDES algorithm: PKCS12PBE algorithm: PBEWITHSHAAND128BITAES-CBC-BC algorithm: IES algorithm: PKIX algorithm: RFC3280 algorithm:
2 2024-04-03
编程技术问答社区
为什么Google Cloud Key Management Service'的Java客户端库不支持Android?
这是另一个链接.) ) 只使用 解决方案 我们没有做任何特定的工作来使Google-loud-Java与Android兼容,并且有许多已知问题(如您所发现的).一流的Android支持将在以后到来. 我们当前推荐的方法是拥有您自己的服务器(例如在应用引擎上),该服务器可以拨打GCP,而您自己的Android应用程序会拨打服务器.原因是Google-cloud-Java仅支持2LO AUTH(基于服务时),而不是3LO auth(基于用户 - 估计).如果您通过2LO AUTH从Android应用程序中拨打电话,从理论上讲,某人可以从您的应用程序中窃取您的服务凭据并在自己的应用中使用它们.但是,这不是3lo的问题.
2 2024-04-03
编程技术问答社区
安卓系统使用RSA公钥对字符串进行加密
我在一个项目中工作,必须使用RSA公共密钥对密码进行加密.我尝试了许多样本和解决方案,如下所示 android RSA从公共字符串中加密 使用SpongyCastle rsa 不幸的是,在我的情况下,这些解决方案都没有使用.如果我尝试进行任何工作 ,我会反复进行以下例外 错误日志: 04-21 07:50:57.876 18842-18842/com.takeoffandroid.passwordencryption W/art: Before Android 4.1, method android.graphics.PorterDuffColorFilter android.support.graphics.drawable.VectorDrawableCompat.updateTintFilter(android.graphics.PorterDuffColorFilter, android.content.res.ColorStateList, a
0 2024-04-03
编程技术问答社区
我怎样才能生成一个有效的ECDSA EC密钥对?
我正在尝试使用Android中的海绵状castle生成ECDSA密钥对. 这是代码: static { Security.insertProviderAt(new org.spongycastle.jce.provider.BouncyCastleProvider(), 1); } public static KeyPair generate() { ECParameterSpec ecSpec = ECNamedCurveTable.getParameterSpec("prime256v1"); KeyPairGenerator generator = KeyPairGenerator.getInstance("ECDSA", "SC"); generator.initialize(ecSpec, new SecureRandom()); KeyPair keyPair = g.generateKeyPai
0 2024-04-03
编程技术问答社区
java中的公钥对象比较
我有两个publicKey对象.我想比较使用Java Security API或Boncy Castle API的最新对象的比较.我该如何实现? 解决方案 您可以使用equals if (!key.equals(copyKey)){ System.out.println("not equals!"); } 或检查键的主题 if (key.hashCode() != copyKey.hashCode()) { System.out.println("public key hashCode check failed"); } 或比较两个公共键的十六进制字符串 String encodedKey1 = new String(Hex.encode(key1.getEncoded())); String encodedKey2 = new String(Hex.encode(key2.getEncoded())); if (!encodedKey
0 2024-04-03
编程技术问答社区
如果针对安卓3.0及更高版本,使用SpongyCastle比BouncyCastle有什么优势吗?
如果我正确理解了情况,Spongycastle是重命名的,它的创建是为了使人们能够在Android上包括一个新版本的Bouncycastle,因为仅包括最新的Bouncycastle Jar会引起与旧的旧版本的冲突,并剥离了. Android随附的Bouncycastle版本. 但是,显然是从3.0版(2011年至6年前!)Android Bouncycastle包的重命名为com.android.org.bouncycastle,因此,如果您包括常规org.bouncycastle,这将不再与Pre -Pre -Pre -Pre包装剥离的Bouncycastle,您可以以这种方式使用最新版本. 令我感到困惑的是,似乎海绵状的项目仍然很活跃,每当我搜索"在Android上的Bouncycastle"或任何相关的东西时,我都会从过去几年中获得很多结果,这些结果建议使用Spongycastle,引用,引用阶级冲突问题作为推理,即使(显然)在2011年一直解决.在运行较早版本的An
0 2024-04-03
编程技术问答社区
客户端证书在安卓系统中不工作-如何调试?
我正在尝试为Android应用程序实现客户端证书通信,但迄今为止没有太大的成功 - 而且,如果可能的话,此功能似乎很难.我实现的全流量在我以前的问题. 我遵循那里的代码和 什么不起作用:在Android客户端和服务器之间打开SSL连接(HttpsURLConnection),导致服务器返回 403状态代码. afaik,这403是因为服务器没有获得或不信任它获得的客户端证书,我不确定如何调试. 有什么作用: 创建PKCS#10请求,将其发送到CA并获得签名的PKCS#7( p7b ) 将接收到的P7B 存储在钥匙室中,并将其导出到PKCS#12( p12 )) (大多数nonying )从设备上选择 p12 ,在Windows上安装,联系服务器并获得连贯的(200 HTTP-OK)响应. 我更改了什么:从我获得的代码样本中-client-side-certificate-from-pkcs10-with-spong">此处和 问题是下一步要做什么: 我
4 2024-04-03
编程技术问答社区
如果你知道曲线名称和原始私钥/点,如何构建私钥?
要求:对于给定的命名曲线,发送尽可能少的数据,以便接收器可以构建EC PrivateKey. 我目前正在使用Android上的Bouncycastle/Spongycastle.这就是我到目前为止所理解的. KeyPairGenerator keyGen = KeyPairGenerator.getInstance("EC"); ECGenParameterSpec ecGenParameterSpec = new ECGenParameterSpec("secp112r2"); keyGen.initialize(ecGenParameterSpec, new SecureRandom()); KeyPair keyPair = keyGen.generateKeyPair(); PrivateKey privateKey = keyPair.getPrivate(); // privateKey.getEncoded() -> gives DER encoded pri
0 2024-04-03
编程技术问答社区
用java导出RSA公钥到PEM字符串
因此,我正在使用海绵状城堡(Android)为RSA公共密钥生成PEM编码的字符串,该键将上传到服务器. 这就是我目前正在做的: PublicKey publicKey = keyPair.getPublic(); StringWriter writer = new StringWriter(); PemWriter pemWriter = new PemWriter(writer); pemWriter.writeObject(new PemObject("RSA PUBLIC KEY", publicKey.getEncoded())); pemWriter.flush(); pemWriter.close(); return writer.toString(); 现在,您可能会说我不确定如何构造PemObject,或者是否有一种更轻松的方法来执行此操作. 使用弹性案例时,我曾经这样做 String
0 2024-04-03
编程技术问答社区
从椭圆曲线点的x和y值生成公钥
我试图在这样的应用中生成一个共享的秘密: public static byte[] generateSharedSecret(PrivateKey privateKey PublicKey publicKey) { KeyAgreement keyAgreement = KeyAgreement.getInstance("ECDH", "SC"); keyAgreement.init(privateKey); keyAgreement.doPhase(publicKey, true); return keyAgreement.generateSecret(); } 这很好,但是我在这里使用的PublicKey应该来自后端. 后端只是向我发送x和y椭圆曲线上一个点的值,现在我应该从中生成PublicKey.但是我只是无法弄清楚!如何仅从这两个值创建PublicKey实例? 解决方案 实际上很简单!但是除了x和y值外,您还需要一件事.
0 2024-04-03
编程技术问答社区
使用Bouncy Castle的SSL进行安卓到服务器的通信
我知道这不是那么困难,但是很遗憾,我被困在这里并与之战斗,从昨天开始,我遵循了 android中的互助教程,以放置资源中的关键店并尝试要通过SSL连接到我的服务器,但是获得以下异常 java.lang.runtimeException: org.spongycastle.jcajce.provider.asymmetric.x509.certificatefactory $ excertificateException 我已将我的sslapptruststore.pfx文件放在res/raw/sslapptruststore.pfx下 并使用此代码 try { KeyStore clientCert = KeyStore.getInstance("PKCS12"); clientCert.load(getResources().openRawRe
0 2024-04-03
编程技术问答社区
如何在安卓系统中包含Spongy Castle JAR?
显然海绵城堡是使用完整版本的Bouncy Castle的Android替代品. 但是,在导入罐子时,我会得到各种"无法解决"错误,因为它依赖于Android未包含的软件包,主要是Javax.Mail,Javax.activation,javax.awt.awt.datatatransfer. P> 那么,解决这个问题是什么?对这个问题 and a>完全不应完全使用这些软件包,这个受欢迎的问题甚至不考虑找到一种使AWT回来的方法.那么海绵城堡如何依靠它们呢? 人们在使用海绵状城堡,对吗? 解决方案 这是两个非常简单的示例,说明如何在项目中加入海绵状城堡: github.com/rtyley/spongyled/spongycastle-eclipse-eclipse - eclipse github.com/rtyley/toy/toy/toy-android-android-android-android-android-ssh-agent - Maven
0 2024-04-03
编程技术问答社区
从Base64编码的字符串中检索ECC公钥
我一直在尝试使用base64编码的ECC公共密钥创建java.security.PublicKey的实例. mainActivity.java @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); try { byte[] data = decodePublicKey("AsIAEFjzIcX+Kvhe8AmLoGUc8aYAEAwf5ecREGZ2u4RLxQuav/A="); PublicKey publicKey = loadPublicKey("secp128r1", data); Log.d(TAG, publicKey.toString()); } catch
2 2024-03-27
编程技术问答社区
Android:找不到org.spongycastle.util.io.pem.PemReader
我在我的Android代码中使用海绵状castle.代码在Android 5和Android 6中正常工作,但在Android 4中显示错误: java.lang.NoClassDefFoundError: org.spongycastle.util.io.pem.PemReader 在以下代码中pemreader初始化时失败: private PublicKey getPublicKey(AssetManager manager, String keyPath) { PublicKey key = null; try { final KeyFactory keyFactory = KeyFactory.getInstance(TicketVerifier.ENCRYPTION_ALGORITHM); InputStream stream = manager.open(keyPath); final
4 2024-02-10
编程技术问答社区
使用海绵城堡和Proguard
我一直在与Proguard努力,以使海绵状castle起作用. 在大多数情况下,当我导出签名的APK时,问题出现了,我有错误,或者该应用程序会在启动之前崩溃. 所以,我设法收集了信息以获得工作的配置: -optimizationpasses 5 -dontusemixedcaseclassnames -dontskipnonpubliclibraryclasses -dontskipnonpubliclibraryclassmembers -dontpreverify -verbose -repackageclasses '' -allowaccessmodification -keepattributes *Annotation* -optimizations !code/simplification/arithmetic -libraryjars C:\Program Files\Java\jre7\lib\rt.jar -libraryjars libs\sc-li
14 2024-02-04
编程技术问答社区
ECC算法的密钥不匹配
我正在尝试在Android上实现ECC算法.我目前正在使用海绵城堡来实施它. 关键一代锥段如下: KeyPairGenerator kpg = null; try { kpg = KeyPairGenerator.getInstance("ECIES");// Do i have to do any changes here? } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } ECGenParameterSpec brainpoolP160R1 = new ECGenParameterSpec("brainpoolP160R1"); try { kpg.initialize(brainpoolP160R1); } catch (InvalidAlgorithmParameterException) { } KeyPair kp = kpg.generateKeyPair
4 2024-02-02
编程技术问答社区
用SpongyCastle的PKCS#10的客户端证书创建一个Https连接
目标 我正在努力与客户认证实施通信. 步骤1:创建一个PKCS#10请求(CSR),并将其交给我的服务器进行签名.服务器联系将CSR传递到CA,CA签名并返回PKCS#7(带有签名的PKCS#10和CA的证书). 步骤2:创建PKCS#12,将其安全存储在Android设备上 步骤3:创建SSL连接,以便根据证书对客户端进行身份验证. 现在,步骤1使用SpongyCastle 1.50.0.0完美工作,但我陷入了其他步骤... 我目前正在遇到SSL Handshake例外,但是我感觉应该重新考虑自己的实施. 问题 有人知道如何实施流程吗?如何创建和存储客户端证书所需的内容,以与Android的SSLContext合作,以及如何创建此类SSLContext? 我到目前为止尝试的 我的第一次尝试是使用 keychain ,但我们想避免在那里所述的用户互动.我的第二次尝试是关注 Rich Freedman的步骤,但是我不知道如何从PKCS#
2 2024-02-01
编程技术问答社区