Я хотел бы выполнить шифрование на клиенте, используя асимметричный ключ, хранящийся и сгенерированный в SQL Server.
Я могу получить открытый ключ из DMV, используя следующий запрос:
SELECT public_key FROM sys.asymmetric_keys WHERE name = 'KeyName'
Это возвращает следующее значение:
0x06020000002400005253413100020000010001008B656455D4C56392C45EEC3563203635F5F42DDA57069E7A880BF0AF055174A2A165DED75BA4E73E2A09BCBFAA3314042B4E2761FF7C1FA388
Как я могу использовать это двоичное значение в качестве открытого ключа для RSA_512
шифрования в .Net? Я просмотрел похожие вопросы здесь, но не нашел подходящего решения: мне нужен либо ключ в форме XML, либо, по крайней мере, знать .Modulus
и .Exponent
открытого ключа. Могу ли я получить это из этой двоичной последовательности?
ИЗМЕНИТЬ:
Вот мой код
SqlCommand cmd = new SqlCommand(string.Format("SELECT dbo.GetKey(@KeyName)", conn);
cmd.Parameters.AddWithValue("@KeyName", ConfigurationManager.AppSettings.Get("PublicKeyName"));
PublicKey = (byte[]) cmd.ExecuteScalar();
var rsa=new System.Security.Cryptography.RSACryptoServiceProvider(Convert.ToInt32(ConfigurationManager.AppSettings.Get("KeyLength")));
rsa.ImportCspBlob(PublicKey);
EncryptedData = rsa.Encrypt(Data,false);
Я получаю исключение «Ключ недействителен» в последней строке.