我看到SQL Server 2016上的各种文章的“始终加密”功能描述了使用SQL Server Management Studio UI或使用New-SqlColumnEncryptionKey powershell命令创建列加密密钥。但是如果C#客户端应用程序本身想要创建列加密密钥呢?这个ENCRYPTED_VALUE
列的格式是什么?
CREATE COLUMN ENCRYPTION KEY CEK1
WITH VALUES (
COLUMN_MASTER_KEY = CMK1,
ALGORITHM = 'RSA_OAEP',
ENCRYPTED_VALUE = ??????
答案 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指出我正确的方向。