c# – 加密BouncyCastle RSA密钥对并存储在SQL2008数据库中

我有一个生成BouncyCastle RSA密钥对的函数.我需要加密私钥,然后将加密的私钥和公钥存储到单独的SQL2008数据库字段中.

我使用以下内容获取密钥对:

private static AsymmetricCipherKeyPair createASymRandomCipher()
{
    RsaKeyPairGenerator r = new RsaKeyPairGenerator();
    r.Init(new KeyGenerationParameters(new SecureRandom(), 1024));
    AsymmetricCipherKeyPair keys = r.GenerateKeyPair();
    return keys; 
}

这是正确的返回键,但我不知道如何加密私钥然后将其存储在数据库中.

这是我目前使用的加密数据(错误?):

public static byte[] encBytes2(AsymmetricKeyParameter keyParam, byte[] Key, byte[] IV)
{
    MemoryStream ms = new MemoryStream();
    Rijndael rjdAlg = Rijndael.Create();
    rjdAlg.Key = Key;
    rjdAlg.IV = IV;
    CryptoStream cs = new CryptoStream(ms, rjdAlg.CreateEncryptor(), CryptoStreamMode.Write);
    byte[] keyBytes = System.Text.Encoding.Unicode.GetBytes(keyParam.ToString());
    cs.Write(keyBytes, 0, keyBytes.Length);
    cs.Close();
    byte[] encryptedData = ms.ToArray();
    return encryptedData;
}

显然,我转换keyParam.ToString()的keyBytes设置不正确,因为它只转换KeyParameter名称,而不是实际值.我正在向此函数提交以前的密钥对返回密钥.私有.

另一个问题是因为我没有加密公钥我应该在SQL2008数据库,nvarchar(256)或其他中存储什么格式?

任何帮助将不胜感激.

最佳答案
由于应该清楚的原因,默认(也许是无意的)序列化不能很好地与私钥一起使用,私钥只应在非常有限的情况下写出.

BouncyCastle支持PKCS#8,这是“序列化”私钥的相关标准.有一些名为PrivateKeyInfo和EncryptedPrivateKeyInfo的ASN.1结构.由于它们在ASN.1中,因此有标准方法可以序列化/反序列化它们.顾名思义,一个用密钥存储密钥,另一个用密码加密密钥.

对于公钥 – 这些通常不会被加密. BC支持用于序列化它们的X.509标准格式的SubjectPublicKeyInfo.

在C#build中,要查看的高级类将是:

> Org.BouncyCastle.Security.PrivateKeyFactory
> Org.BouncyCastle.Security.PublicKeyFactory
> Org.BouncyCastle.Pkcs.EncryptedPrivateKeyInfoFactory
> Org.BouncyCastle.Pkcs.PrivateKeyInfoFactory
> Org.BouncyCastle.X509.SubjectPublicKeyInfoFactory

转载注明原文:c# – 加密BouncyCastle RSA密钥对并存储在SQL2008数据库中 - 代码日志