我正在使用:
以下是我所做的:
RSACryptoServiceProvider csp = (RSACryptoServiceProvider)cert.PublicKey.Key
所以我不确定如何进一步使用ECC X509证书的公钥来加密数据。
非对称算法有三种不同的用途(据我所知)
using (ECDsa ecdsa = cert.GetECDsaPublicKey())
{
return ECDiffieHellman.Create(ecdsa.ExportParameters(false));
}
ECDiffieHellmanPublicKey recipientPublic = GetECDHFromCertificate(cert).PublicKey;
ECCurve curve = recipientPublic.ExportParameters().Curve;
所以现在我们转到http://www.secg.org/sec1-v2.pdf第5.1节(椭圆曲线综合加密方案)
>
在右曲线上制作一个短暂的键。
ECDiffieHellman ephem = ECDiffieHellman.Create(curve);
ECParameters ephemPublicParams = ephem.ExportParameters(false);
int pointLen = ephemPublicParams.Q.X.Length;
byte[] rBar = new byte[pointLen * 2 + 1];
rBar[0] = 0x04;
Buffer.BlockCopy(ephemPublicParams.Q.X, 0, rBar, 1, pointLen);
Buffer.BlockCopy(ephemPublicParams.Q.Y, 0, rBar, 1 + pointLen, pointLen);
// This is why we picked AES 256, HMAC-SHA-2-256(-256) and SHA-2-256,
// the KDF is dead simple.
byte[] ek = ephem.DeriveKeyFromHash(
recipientPublic,
HashAlgorithmName.SHA256,
null,
new byte[] { 0, 0, 0, 1 });
byte[] mk = ephem.DeriveKeyFromHash(
recipientPublic,
HashAlgorithmName.SHA256,
null,
new byte[] { 0, 0, 0, 2 });
byte[] em;
// ECIES uses AES with the all zero IV. Since the key is never reused,
// there's not risk in that.
using (Aes aes = Aes.Create())
using (ICryptoTransform encryptor = aes.CreateEncryptor(ek, new byte[16]))
{
if (!encryptor.CanTransformMultipleBlocks)
{
throw new InvalidOperationException();
}
em = encryptor.TransformFinalBlock(message, 0, message.Length);
}
byte[] d;
using (HMAC hmac = new HMACSHA256(mk))
{
d = hmac.ComputeHash(em);
}
// Either
return Tuple.Create(rBar, em, d);
// Or
return rBar.Concat(em).Concat(d).ToArray();
问题内容: 我需要使用公钥(pem文件)对字符串进行加密,然后使用私钥(也为pem)对其进行签名。 我正在加载pem文件: 但是经过数小时的搜索,我似乎无法找到一种使用公钥加密数据的方法。在php中,我只是调用openssl_public_encrypt,但在节点或任何模块中都看不到任何相应的功能。 如果有人有任何建议,请告诉我。 问题答案: 没有图书馆必要的朋友, 输入密码 这是一个简单的小模块
问题内容: keytool中是否可以打印证书的公钥?我试过了: 但是它仅提供以下信息: 在此没有公钥。 问题答案: 您可以使用做到这一点。 如果此证书是DER编码的(二进制),请使用: 用于PEM编码的使用选项(或完全不设置)。 要查看公钥的详细信息,请使用:
如何为密钥对创建X509证书?(我的类已经有了密钥对,我需要创建一个证书来保存我的公钥,然后将其存储在密钥库中)。 我期望有一个X509证书构造函数能够接收我的公钥,然后通过keystore.set条目(pvtkey,cert)存储它,但我没有发现任何有用的关联新证书和我的密钥对... 任何想法? 编辑:我也试图通过证书链为空,但它不起作用,它看起来像一个错误报告http://bugs.sun.c
我使用下面的openssl命令将公钥存储到。pem文件。 但是当我尝试使用此命令时,它将整个证书信息存储在mypubkey.pem文件中。 我已经看到我可以保存我的公钥使用 但这是一个错误。我不能使用“
我找到了几个可以使用的解决方案。Net RSA Provider使用公钥对消息进行加密,并使用私钥对其解密。 但我想要的是用私钥加密,用公钥解密。 我希望在我的应用程序中存储公钥,并使用私钥加密许可证,例如在我的开发人员计算机上,将其发送到应用程序,并让信息使用公钥解密。 我怎样才能做到这一点?
null 大多数示例使用makecert或New-SelfSignedCertificate创建证书。在这种情况下,对于生产应用程序,自签名证书是否有问题?这仅供应用程序使用Azure Key Vault进行身份验证,客户机在浏览器中不会看到这一点。 如果在这种情况下,自签名证书仍然不受欢迎,那么从受信任的权威机构购买证书是否与购买SSL/TLS证书的过程相同?甚至是同一类型的证书吗?