使用参数进行加密C#SQL Server无法正常保存

时间:2017-09-13 22:46:29

标签: c# sql-server encryption

我正在尝试将加密数据插入到SQL表中。我想保存两个随机数。这是我生成随机数的代码:

        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中时才有效。

非常感谢任何帮助或建议!

1 个答案:

答案 0 :(得分:0)

这是我最终使用的代码:

@SuppressWarnings("unchecked")
public static <T extends Blah> T Parse(String json) {
    Gson gson = new Gson();

    Blah t = new Blah(gson.fromJson(json, Blah.class));
    switch (t.getType()) {
        case blahone:
            return (T) gson.fromJson(json, BlahOne.class);
        default:
            return (T) t;
    }
};

由于这是一个Windows窗体应用程序,并且不存在注入问题,因此这是我能想到的最佳解决方案。