2017-09-13 50 views
0

我试图将加密数据插入到SQL表中。我试图保存两个随机数字。这里是我生成随机数的代码:使用参数C#加密SQL Server未正确保存

 Random randomNumber = new Random(); 
     int key1 = randomNumber.Next(10000000, 99999999); 
     Thread.Sleep(1000); 
     Random randomNumber2 = new Random(DateTime.Now.Second); 
     int key2 = randomNumber2.Next(10000000, 99999999); 

然后我将它插入表中。这第一套代码的作品,但我不能使用它,因为它不适用于我的随机数字。但它确实证实我有它基本上是正确的:

 SqlCommand cmd = new SqlCommand(@"OPEN SYMMETRIC KEY KeyCodesKey DECRYPTION BY CERTIFICATE KeyCodes; 
     insert into keyfile(encrypted_key1, encrypted_key2, startingkeydate) values (EncryptByKey(Key_GUID('KeyCodesKey'), '19630515'), EncryptByKey(Key_GUID('KeyCodesKey'), '19520921'), CURRENT_TIMESTAMP)", cx); 
     int success = cmd.ExecuteNonQuery(); 

这是我更愿意用代码,但我似乎无法得到它的工作:

 SqlCommand cmd = new SqlCommand(@"OPEN SYMMETRIC KEY KeyCodesKey DECRYPTION BY CERTIFICATE KeyCodes; 
     insert into keyfile(encrypted_key1, encrypted_key2, startingkeydate) values (EncryptByKey(Key_GUID('KeyCodesKey'), @key1), EncryptByKey(Key_GUID('KeyCodesKey'), @key2), CURRENT_TIMESTAMP)", cx); 
     cx.Open(); 
     cmd.Parameters.AddWithValue("@key1",key1.ToString()); 
     cmd.Parameters.AddWithValue("@key2", key2.ToString()); 
     int success = cmd.ExecuteNonQuery(); 

我没有得到任何错误,但是当我查看未加密的数据时,我只会得到一个数字。如果我硬编码参数,它也不起作用。它只适用于实际的数字在SqlCommand中。

任何帮助或建议将不胜感激!

回答

0

这是我最后使用的代码:

SqlCommand cmd = new SqlCommand(@"OPEN SYMMETRIC KEY KeyCodesKey DECRYPTION BY CERTIFICATE KeyCodes; 
    insert into keyfile(encrypted_key1, encrypted_key2, startingkeydate) values (EncryptByKey(Key_GUID('KeyCodesKey'),"+key1.ToString()[email protected]"), EncryptByKey(Key_GUID('KeyCodesKey'), "+key2.ToString()[email protected]"), CURRENT_TIMESTAMP)", cx); 
    cx.Open(); 
    int success = cmd.ExecuteNonQuery(); 
    cx.Close() 

由于这是一个Windows窗体应用程序并没有注入问题的可能性,这是最好的解决办法,我能想出的作品。