Encrypt - расшифровывает datagridview mysql: входные данные не полный блок - PullRequest
0 голосов
/ 16 октября 2018

Я все еще начинающий актер и парень, который помогал мне, ушелУ меня есть 2 базы данных.Я хочу переместить пароли из одной базы данных в другую.Но каждая база данных использует свое шифрование.Я хочу расшифровать пароли базы данных 1, а затем зашифровать их для базы данных 2 с другим шифрованием.Я даже не знаю, будет ли код работать так, как я не могу его протестировать ... Я получаю ошибку здесь:

открытая строка Decrypt >>>> cs.Close ();

System.Security.Cryptography.CryptographicException: «Входные данные не являются полным блоком.»

private void PopulateData()
{
dataGridView1.AutoGenerateColumns = false;
dataGridView1.ColumnCount = 3;
dataGridView1.Columns[0].Name = "UserName";
dataGridView1.Columns[0].HeaderText = "UserName";
dataGridView1.Columns[0].DataPropertyName = "UserName";

dataGridView1.Columns[1].HeaderText = "Encrpted Password";
dataGridView1.Columns[1].Name = "Password";
dataGridView1.Columns[1].DataPropertyName = "Password";

dataGridView1.Columns[2].HeaderText = "Decrypted Password";
dataGridView1.Columns[2].Name = "DecryptedPassword";
dataGridView1.Columns[2].DataPropertyName = "DecryptedPassword";

        string constring = 
"datasource=server;port=port;username=user;password=pass;SSL Mode=None";
        MySqlConnection conDatabase = new MySqlConnection(constring);
        MySqlCommand cmdDatabase = new MySqlCommand(" SELECT 
username,password FROM database.users WHERE 1 ;", conDatabase);
        try
        {
            MySqlDataAdapter sda = new MySqlDataAdapter();
            sda.SelectCommand = cmdDatabase;
            DataTable dbdataset = new DataTable();
            sda.Fill(dbdataset);
            BindingSource bsource = new BindingSource();
            bsource.DataSource = dbdataset;
            dataGridView1.DataSource = bsource;
            sda.Update(dbdataset);

        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        }
        { 
            foreach (DataGridViewRow row in dataGridView1.Rows)
            {
                row.Cells[2].Value = Decrypt(row.Cells[1].Value.ToString());
            }
        }
}

private void btnSave_Click(object sender, EventArgs e)
{
string constr = 
ConfigurationManager.ConnectionStrings["constr"].ConnectionString;
using (SqlConnection con = new SqlConnection(constr))
{
    using (SqlCommand cmd = new SqlCommand("insert into 
database.user_account (username, passwd) values (@username,@passwd) ON 
DUPLICATE KEY UPDATE username = username,passwd=passwd"))
    {
        cmd.CommandType = CommandType.Text;
        cmd.Parameters.AddWithValue("@username", dataGridView1.Text.Trim());
        cmd.Parameters.AddWithValue("@passwd", 
Encrypt(dataGridView1.Text.Trim()));
        cmd.Connection = con;
        con.Open();
        cmd.ExecuteNonQuery();
        con.Close();
    }
}
this.PopulateData();
}

private string Encrypt(string clearText)
{
string EncryptionKey = "xxxxx";
byte[] clearBytes = Encoding.Unicode.GetBytes(clearText);
using (Aes encryptor = Aes.Create())
{
    Rfc2898DeriveBytes pdb = new Rfc2898DeriveBytes(EncryptionKey, new 
byte[] { 0x49, 0x76, 0x61, 0x6e, 0x20, 0x4d, 0x65, 0x64, 0x76, 0x65, 0x64, 
0x65, 0x76 });
    encryptor.Key = pdb.GetBytes(32);
    encryptor.IV = pdb.GetBytes(16);
    using (MemoryStream ms = new MemoryStream())
    {
        using (CryptoStream cs = new CryptoStream(ms, 
encryptor.CreateEncryptor(), CryptoStreamMode.Write))
        {
            cs.Write(clearBytes, 0, clearBytes.Length);
            cs.Close();
        }
        clearText = Convert.ToBase64String(ms.ToArray());
    }
}
return clearText;
}

private string Decrypt(string cipherText)
{
string EncryptionKey = "xxxx";
byte[] cipherBytes = Convert.FromBase64String(cipherText);
using (Aes encryptor = Aes.Create())
{
    Rfc2898DeriveBytes pdb = new Rfc2898DeriveBytes(EncryptionKey, new 
byte[] { 0x49, 0x76, 0x61, 0x6e, 0x20, 0x4d, 0x65, 0x64, 0x76, 0x65, 0x64, 
0x65, 0x76 });
    encryptor.Key = pdb.GetBytes(32);
    encryptor.IV = pdb.GetBytes(16);
    using (MemoryStream ms = new MemoryStream())
    {
        using (CryptoStream cs = new CryptoStream(ms, 
encryptor.CreateDecryptor(), CryptoStreamMode.Write))
        {
            cs.Write(cipherBytes, 0, cipherBytes.Length);
            cs.Close();
        }
        cipherText = Encoding.Unicode.GetString(ms.ToArray());
    }
}
return cipherText;
}

Я попробовал все на своем опыте, но это не сработало.И есть ли более простой способ сделать это?Я прошу прощения за мою неопытность и длинный пост!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...