2017-10-10 75 views
0

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

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

回答

0

对于证书存储提供程序,您可以使用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指着我在正确的方向。