如何从c#客户端创建始终加密的列加密密钥

时间:2017-10-10 23:47:38

标签: c# sql-server encryption sql-server-2016 always-encrypted

我看到SQL Server 2016上的各种文章的“始终加密”功能描述了使用SQL Server Management Studio UI或使用New-​Sql​Column​Encryption​Key powershell命令创建列加密密钥。但是如果C#客户端应用程序本身想要创建列加密密钥呢?这个ENCRYPTED_VALUE列的格式是什么?

CREATE COLUMN ENCRYPTION KEY CEK1
WITH VALUES (
COLUMN_MASTER_KEY = CMK1,
ALGORITHM = 'RSA_OAEP',
ENCRYPTED_VALUE = ??????

1 个答案:

答案 0 :(得分:3)

对于证书商店提供商,您可以使用SqlColumnEncryptionCertificateStoreProvider.EncryptColumnEncryptionKey Method,例如如下图所示:

var randomBytes = new byte[ 32 ];
using (var rng = new RNGCryptoServiceProvider())
{
    rng.GetBytes( randomBytes );
}
var provider = new SqlColumnEncryptionCertificateStoreProvider();
var encryptedKey = provider.EncryptColumnEncryptionKey( masterKeyPath, "RSA_OAEP", randomBytes );
var encryptedKeySerialized = "0x" + BitConverter.ToString( encryptedKey ).Replace( "-", "" );

感谢this blog post指出我正确的方向。