问题标签 [spongycastle]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
3360 浏览

java - 从 Base64 编码的字符串中检索 ECC 公钥

我一直在尝试创建一个java.security.PublicKey使用 Base64 编码的 ECC 公钥的实例。

MainActivity.java

日志猫:

进一步检查:

在 Logcat 中,在打印解码后的字节时,它们实际上与服务器上的不同:

在 python 控制台中:

如果有人可以解释这种异常的原因,并且还可以帮助我在小片段上PublicKey从字符串中获取实例,那就太好了。

参考:

提前致谢!!

更新:

当尝试使用下面的行加载 ASN1Primitive 时,它​​会引发以下异常:

例外:

0 投票
2 回答
49 浏览

android - 在 Android 应用程序中使用 Java SDK

所以我正在构建的应用程序必须使用特定的库。不幸的是,这个库在其中使用了 bouncycastle。众所周知,这不适用于 Android。有没有办法解决这个问题?有人建议我构建一个服务层来与库 SDK 交互,但我不知道从哪里开始,也不知道那到底是什么。

0 投票
0 回答
784 浏览

java - Spongycastle 将证书写入 PEM 然后读取它

我在读取使用 SpongyCastle 生成并写入磁盘的证书的 PEM 文件时遇到问题。

我正在使用以下功能保存我的证书

这似乎工作正常。

现在,当我尝试使用 `PEMParser 读取此文件时,会引发异常。我正在使用以下函数来读取文件。

大多数时候异常的原因是

但有时我会得到这个

我不知道我做错了什么。文件输出看起来不错。它的格式是这样的

我究竟做错了什么?

编辑

如果我使用 将文件读入字符串BufferedReader,这就是输出

所以我想读取的数据是正确的。

0 投票
1 回答
3116 浏览

java - 如果您知道曲线名称和原始私钥/点,如何构造 PrivateKey?

要求:对于给定的命名曲线,发送尽可能少的数据,以便接收方可以构造 EC PrivateKey。

我目前在 Android 上使用 BouncyCastle/SpongyCastle。这是我到现在才明白的。

现在,使用 Bouncy/Spongy 城堡,我得到了私钥的实际点,而没有 derEncoding 中存在的任何其他信息。

问题:如何仅使用点D ( privateKeyParam.getD()) 和曲线名称重建 PrivateKey 对象?使用曲线名称,我可以获得 ECCurveParameters。

编辑:我能够ECPrivateKeyParameters使用私钥点 ( praram.getD()) 构建,但仍然无法弄清楚如何从ECPrivateKeyParameters.

0 投票
2 回答
1951 浏览

java - 使用 SpongyCastle 验证 ECDSA 签名

我正在尝试使用 SpongyCastle 在 Android 上验证 ECDSA 数字签名。我有一个X509Certificate包含我需要用来验证它的公钥,但我不太清楚如何获取PublicKey(向下转换ECPublicKey)以用于ECDSASigner该类。

我使用 C# 版本的 BouncyCastle 完成了这项工作,如下所示:

在 API 的 Java 版本中,该X509Certificate.getPublicKey()方法返回一个PublicKey类而不是AsymmetricKeyParameter. 但是,该ECDSASigner.init()方法需要一个CipherParameters对象。我不知道如何为 ECDSA 执行此操作。

对于 RSA 签名,我只是手动重建了一个新RSAKeyParameters对象:

这似乎并不理想,但我认为它应该工作。但我什至不知道如何为 ECDSA 做这个等价物。我认为有更好的方法可以做到这一点,但我无法确定要使用的正确 API。

0 投票
2 回答
2108 浏览

java - Android 与使用 SSL 和 Bouncy Castle 的服务器通信

我知道这不是那么困难,但非常不幸的是,我从昨天开始就被困在这里并与之抗争,我已经按照这个Android 教程中的相互身份验证,在资源中放置一个密钥库并尝试通过 SSL 连接到我的服务器,但是得到以下异常

java.lang.RuntimeException:org.spongycastle.jcajce.provider.asymmetric.x509.CertificateFactory$ExCertificateException

我已将我的sslapptruststore.pfx文件放在res/raw/sslapptruststore.pfx 并使用这段代码

我也搜索过,但其他人正在使用.bks.

任何帮助表示赞赏。

0 投票
1 回答
574 浏览

java - 可以在没有 AlgorithmParameterSpec 的情况下使用 KeyAgreement 吗?

在我使用SpongyCastle的 Android 应用程序中,我想使用特定的椭圆曲线( prime192v1 ) 执行ECDH 密钥交换,并且我正在使用此代码生成私有和公共参数的字节 [] 表示:

现在让我们假设 Alice 和 Bob 将他们的私钥保存在本地,交换pubK1pubK2希望继续设置共享密钥(他们现在拥有两个密钥的byte[]格式)。我将只描述爱丽丝的情况,至于鲍勃,这是相同的:

我的问题来了-使用以下代码,我设法为 Alice 和 Bob 获得了相同的共享密钥

但我没有指定我的特殊曲线prime192v1

如果我尝试以这种方式提供:

抛出异常说

为什么我不能提供我想要的参数?是否以KeyAgreement某种方式从私钥中推断出这一点?

谢谢!

0 投票
0 回答
1611 浏览

java - Android 在 X.509 证书中验证 CA 签名

我有一个根 CA 证书和一个由 CA 签名的用户证书。在使用 Certutil 或 OpenSSL 的 Windows 下,我可以验证 CA 在用户证书签名上的签名是否正常。现在我正在尝试在 Android 下验证相同的签名。

我使用海绵城堡,但我不确定这一步是否完全必要。我使用 ECDH 384 位密钥对。签名是“SHA384WITHECDSA”。我可以生成自签名证书并通过 certificate.verify 方法或通过计算签名来验证其签名:

同理可以查看CA证书,也是自签名证书:

现在我想使用 CA 证书的公钥检查用户证书。但上述验证方法都不起作用:

所以目前我只能检查自签名证书:(我原以为在这里使用 RootCaX509Cert.getPublicKey() 作为密钥会起作用,但事实并非如此。也许我误解了这个 CA 签名验证应该如何完成?

0 投票
0 回答
379 浏览

java - Serpent GCM 充气城堡在 Android 上的实现非常慢

我使用最新的Bouncy Castle资源来实现 Serpent GCM 加密。

它在我的台式机(Windows Core i7)上完美运行。加密 5Mb 文件大约需要 190 毫秒。但是突然之间,在三星 Galaxy 4 平板电脑(Android 5.0.1)上部署的相同代码需要 40 秒才能对同一文件进行相同的加密。我们试用了华为Acend G300(Android 2.3.6),仅需17秒。

我们还用Spongy Castle测试了相同的加密,不幸的是我们没有得到更好的性能。

  1. 您能否告诉我为什么它与台式机有如此巨大的不同,以及为什么在功能更弱的华为设备上的加密时间比三星 Galaxy s4 平板电脑上的更快?
  2. 如果有什么方法可以提高代码在 Android 上的性能?

非常感谢您的帮助!

0 投票
1 回答
1654 浏览

java - 如何将 PEM 公钥转换为 DER 公钥?

我从我的 REST API 收到一个公钥,该公钥以 PEM 编码。现在,我需要将编码更改为 DER 以便将其存储为PublicKey对象。但是,不幸的是,我收到以下错误:

java.lang.IllegalArgumentException:getInstance 中的未知对象:org.spongycastle.asn1.ASN1Integer

错误指向这一行:

公钥如下所示:

这是我的代码: