问题标签 [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 回答
447 浏览

android - 从 PEM 编码字符串创建 RSAPrivateKey

所以我有这个代码

使用它可以正常工作bouncycastle,但是我需要它才能在 Android 上运行,所以我导入了SpongyCastle,但是海绵城堡没有PEMReader(显然PEMReader是在较旧的 bo​​uncycastle 版本中)

如何RSAPrivateKey在不使用 bouncycastle 的情况下创建与上述代码等效的代码PEMReader

0 投票
1 回答
3854 浏览

java - java.io.IOException:密钥库的版本错误。使用海绵城堡

我正在使用 Spongycastle 并希望以编程方式创建自签名证书。当我在 Android 中运行下面的代码时,我得到java.io.IOException: Wrong version of key store.

我不确定我做错了什么,我认为 Spongycastle 是正确的版本?

无论如何,这里是代码:

0 投票
1 回答
960 浏览

java - “包 org.spongycastle.crypto 不存在”在一个项目上,但在另一个项目上工作正常

我已经下载了这两个项目,bitcoinj 被重新设置为正确的 v0.11.3 标签:

https://github.com/schildbach/bitcoin-wallet/
https://github.com/bitcoinj/bitcoinj

比特币钱包项目将 bitcoinj 0.11.3 作为对 maven 存储库的依赖,并且运行良好。然后我将其更改为用于<scope>system</scope>查找我构建的本地 bitcoinj .jar。自从我做了这个比特币钱包以来一直抱怨(每次导入和使用未定义符号都有错误):

这很奇怪,因为 bitcoinj 也可以导入org.spongycastle.crypto...,但它可以正确构建。我在 pom 文件中的任何地方都找不到任何对 spongycastle 依赖项的引用。比特币钱包不做的比特币j在做什么?

0 投票
1 回答
1865 浏览

android - 使用 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#7 和私钥创建 PKCS#12。对于持久性,我浏览了这篇文章,但是 (a) 它是 C#,(b) 它是未加密的,并且 (c) 我认为 android 平台具有更好的密钥持久性机制,我对此一无所知。最后,这段代码(用于从 PEM 和 PKCS#7 创建 PKCS12)效果不佳,因为我不知道如何获取 CER 文件以及它需要的其他内容。

谢谢!

0 投票
1 回答
1292 浏览

android - 客户端证书不适用于 Android - 如何调试?

我正在尝试为 Android 应用程序实现客户端证书通信,但到目前为止没有取得多大成功 - 如果可能的话,这个功能似乎非常困难。我正在实施的完整流程在我之前的问题中进行了描述。

我按照那里的代码和这篇博文中的代码,或多或少地描述了相同的场景,但没有结果。

什么不起作用:在 Android 客户端和服务器之间打开 SSL 连接 ( HttpsURLConnection) 会导致服务器返回403 状态代码
AFAIK,这个 403 是因为服务器没有获得或不信任它获得的客户端证书,我不知道如何调试它。

有什么作用:

  • 创建 PKCS#10 请求,将其发送到 CA 并获得签名的 PKCS#7 ( P7B )
  • 将收到的带有私钥的P7B存储在 KeyStore 中,并将其导出到 PKCS#12 ( P12 )
  • 最烦人的)从设备中挑选P12,将其安装在 Windows 上,联系服务器并获得一致的(200 HTTP-OK)响应。

我改变了什么:从我得到的代码示例(来自这里这里),我不得不改变一些事情。我正在使用 HttpsURLConnection 而不是 OkHttpClient 作为 @Than 在那里使用的(但这应该没关系),我不能像 Rich Freedman 那样提供证书(他证书,我通过 PKCS#10 和#7),所以我创建了一个信任服务器证书的 CustomTrustManager,因此我使用 SpongyCastle(v1.5.0.0 如果重要,设置为插入为 0 的提供程序)并且也不保留证书,但一切都在内存中完成。

问题是下一步该怎么做:

  • 我如何判断服务器的期望(客户端证书)?
  • 如何判断哪些客户端证书(如果有)正在发送到服务器?
  • 一般如何调试这种情况?(Fiddler 之类的代理对底层 SSL 没用)

谢谢!

0 投票
0 回答
780 浏览

android - 带有 PSK 的 Bouncycastle/Spongycastle Tls

我在使用 tls 和 psk 的 spongycastle 实现时遇到问题。

我从网络服务中获得一个 psk 并尝试连接到网络服务器。在我的HttpTransportLayer课堂上,我创建了一个带有服务器地址和端口的套接字。然后我创建一个TLSIdentity获取sessionIdentifier和共享密钥。

当我尝试连接服务器时出现异常。有谁知道如何解决这个问题?非常感谢!

0 投票
1 回答
383 浏览

java - 如何使用 F2m 构造函数构造 ECFieldElement 对象?

我如何获得与上面相同的 ECFieldElement 对象,但限制是我只能使用以下任何构造函数。

我不是加密专家。我不知道所有这些其他参数是什么。

0 投票
1 回答
469 浏览

java - java中的C#加密实现

我正在开发一个 android 应用程序,我需要在其中实现一些加密。同时,我必须保持与其他版本的应用程序(例如 WP 平台)的兼容性,这些版本已经在生产中。

这是 C# 代码:

我试图用Java实现它。AFAIK,android 中没有默认的 RC2 加密提供程序,所以我使用了Spongy Castle库(用于 android 的 bouncycastle fork)。

这是我的 Java 代码:

并且这些函数的结果是不同的。我做错了什么?

我该怎么做?欢迎任何示例和建议。

最诚挚的问候。

UPD的主要目标是从两个函数中获取相同的字节数组。我无法修改 c# 代码。首先,我想澄清一下我对 c#-code 是否正确:

  • passphrase它从的字节数组创建 MD5 哈希
  • WinApi.CryptDeriveKey它使用专有功能生成加密密钥
  • 此密钥用于使用 RC2 算法加密数据

其次,我想知道是否存在WinApi.CryptDeriveKey函数的类似物——我认为这是主要问题。

抱歉,我的问题太笼统了,因为我不确定上面的问题 ( CryptDeriveKey) 是唯一的。

0 投票
3 回答
1520 浏览

android - 在 Android 中解密 SJCL 加密字符串

我有一个由 SJCL 服务器端加密的字符串,需要在 Android 中使用任何可用的库进行解密。我尝试了 BouncyCastle,直到遇到无法从 PBKDF2 生成密钥的问题。现在我正在使用 SpongyCastle,但我仍然遇到问题。到目前为止,这是我生成密钥和解密字符串的代码:

这是我在函数中调用它的方式:

decodedObject 是 SJCL 在通过具有 UTF-8 的 JsonParser 运行并进行 Base64 解码后的字符串。我拿了它,用密码通过SJCL Demo运行它,解密字符串没问题。我必须在这里遗漏一些简单的东西。

我得到的错误是在 cipher.doFinal 步骤上,如下所示:

我不认为 SJCL 在他们的密码上使用没有填充,所以我尝试在 getInstance 上使用“AES/CCM/PKCS5Padding”,但后来出现了这个错误:

TLDR:我正在寻找在 Android 中解密 SJCL 字符串的最简单方法。建议将不胜感激。

谢谢!

0 投票
2 回答
10986 浏览

java - 使用java将RSA公钥导出到PEM字符串

因此,我使用 Spongy Castle (Android) 为将上传到服务器的 RSA 公钥生成 PEM 编码字符串。这就是我目前正在做的事情:

现在您可能会告诉我,我不确定如何构建PemObject或者是否有更简单的方法来做到这一点。

使用 Bouncy Case 时,我曾经这样做过

但由于某种原因,海绵城堡中不存在 PEMWriter 类