当前位置: 首页 > 知识库问答 >
问题:

给定两个密钥,如何获得与BouncyCastle共享的秘密?

彭宏义
2023-03-14

需要在给定的64字节公钥(他们的)和32字节的私钥(我们的)之间共享秘密。

我有由外部提供商生产的密钥(P-256 ECC代码)。公钥为 64 字节,私钥为 32 字节。

我不知道如何让BouncyCastle导入这些密钥。它似乎期望DER编码的密钥,但这不是我必须使用的。

public static byte[] GetSharedSecret(byte[] their_public, byte[] our_private)
{
  // their_public: 64 byte public key
  // our_private: 32 byte private key
  var pri = PrivateKeyFactory.CreateKey(our_private); // this fails
  var pub = PublicKeyFactory.CreateKey(their_public); // this fails

  // Expected to produce a 32 byte shared secret:
  return ??SomeBouncyCastleCode??.GetSharedSecret();
}

我的期望是加密/密钥代码可以处理32和64字节的密钥数组。在处理嵌入式设备和其他代码空间有限的领域时,无法处理包装/DER/xyz编码的键。这些被分解成实际的键值,这就是我要做的全部工作。

我不知道如何让它与BouncyCastle一起工作。

共有1个答案

浦出野
2023-03-14

< code >协议实用程序。GetBasicAgreement返回< code>IBasicAgreement,您可以< code>Init一个私钥和< code>CalculateAgreement一个公钥。计算结果是一个< code>BigInteger。

对于解析键,可以使用Curve.DecodePoint

下面是一个示例:

var ecP = ECNamedCurveTable.GetByName("curveNameHere");
var ecSpec = new ECDomainParameters(ecP.Curve, ecP.G, ecP.N, ecP.H, ecP.GetSeed());
var publicKey = new ECPublicKeyParameters(ecSpec.Curve.DecodePoint(YourByteArray), ecSpec);

IBasicAgreement agreement = AgreementUtilities.GetBasicAgreement("nameHere");
agreement.Init(privateKey);
BigInteger result = agreement.CalculateAgreement(publicKey);
return result.ToByteArrayUnsigned();
 类似资料:
  • 我有一个运行在400个TaskManager上的flink应用程序。在1小时的窗口时间内,我会更频繁地获得相同的密钥,比如说,在1500个唯一密钥中,有50个密钥会更频繁地出现。这使得很少有任务管理者单独处理的数量比其他人多。如果390个TaskManager每分钟处理50MB,那么其他10个TaskManager每分钟处理10GB。这使得系统速度非常慢。如果负载很高,我们可以与多个TaskMan

  • 本文向大家介绍什么是秘密共享?相关面试题,主要包含被问及什么是秘密共享?时的应答技巧和注意事项,需要的朋友参考一下 回答:秘密共享是用于在区块链中提供数据安全性的主要方法之一。这种方法将个人信息或机密信息分为不同的单元,然后将其发送给网络上的用户。原始信息共享给分配了秘密共享的参与者。

  • 我正在运行fabric 1.4.0网络,我是它的管理员。我丢失了其中一个身份(不是管理员)的密码/机密。 我怎样才能知道这个秘密 我知道,每当我们注册一个新身份时,我们就会得到这个秘密(如果尚未提供的话),并且可以将这个秘密用于注册和其他目的。但我失去了这个秘密。 我也知道,我可以通过使用命令来向身份发布一个新的秘密。但是,这不是我的选择。我想得到现有的一个。 我运行了来查看身份信息,但没有在那里

  • 我有一个使用BouncyCastle作为安全提供者的应用程序,但是我想切换到另一个直接使用OpenSSL(consecrypt)的应用程序。我遇到的问题是,我正在使用BouncyCastle提供的密钥生成器中的ECDH“密钥”,但在我的其他库中没有类似的密钥生成器。 为了比较这两者,我将使用两种方法解码这些点,输入如下- 为提高可读性而添加换行符 使用BouncyCastle方法- 返回的是。返回

  • 我正在尝试将https://docs.microsoft.com/en-us/Azure/key-vault/tutorial-net-create-vault-azure-web-app中的示例代码转换为VB.net,并使用它访问我存储在Azure密钥库中的秘密。我在http://converter.telerik.com/使用了转换器。 转换后的代码出现一个错误:“委托'KeyVaultCli