Невозможно сохранить зашифрованные данные SQL [шифрование уровня SQL] в базе данных SQL с помощью параметра команды в c # - PullRequest
0 голосов
/ 11 марта 2019

Я использую шифрование SQL для шифрования моих данных.Я получаю обычный текст от пользователя, шифрую его с помощью шифрования SQL и вставляю его в базу данных SQL в столбец varbinary.Однако проблема, с которой я сталкиваюсь, заключается в том, что мои данные не сохраняются полностью.если я введу 5000, зашифрую его и сохраню в БД, при расшифровке он возвращает только 5, т.е. первый символ.Я смотрю на это в течение 3 дней, но до сих пор не могу решить.Ниже приведен код для шифрования ввода пользователя: `

    public static readonly String queryOpen = "OPEN SYMMETRIC KEY SymmetricKey1 DECRYPTION BY CERTIFICATE Certificate1; "; //unmodifiable because its readonly
    public static readonly String queryClose = ";CLOSE SYMMETRIC KEY SymmetricKey1;"; //unmodifiable because its readonly


 public static Byte[] EncryptInput(string input)
        {

            SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["test"].ConnectionString);
            con.Open();

            string query = queryOpen + "DECLARE @output varbinary(MAX);SET @output =  EncryptByKey(Key_GUID('SymmetricKey1'),@input)" + queryClose + "select @output";
            SqlCommand cmd = new SqlCommand(query, con);
            cmd.Parameters.AddWithValue("@input",input);

            Byte[] output = cmd.ExecuteScalar() as Byte[];

            return output;


        }

Приведенный выше код принимает ввод от пользователя и шифрует его с использованием шифрования SQL и возвращает в виде байта.Ниже приведен код для вставки вышеуказанных возвращенных данных, т.е. вывода в базу данных SQL

public static readonly String queryOpen = "OPEN SYMMETRIC KEY SymmetricKey1 
DECRYPTION BY CERTIFICATE Certificate1; "; //unmodifiable because its readonly

public static readonly String queryClose = ";CLOSE SYMMETRIC KEY SymmetricKey1;"; //unmodifiable because its readonly

string insertQuery = queryOpen + "insert into fee(feePaid) values (@feePaid)" + Globals.queryClose;

 SqlCommand cmd = new SqlCommand(insertQuery, con);
cmd.Parameters.Add("feePaid", SqlDbType.VarBinary, int.MaxValue).Value = Globals.EncryptInput(TextBox1.Text); // The EncryptInput Method is called here

cmd.ExecuteNonQuery();

Может кто-нибудь помочь и посоветовать?Почему я получаю только первый символ при расшифровке, например, я получаю 5, если пользовательский ввод 5000.

...