Я все еще начинающий актер и парень, который помогал мне, ушелУ меня есть 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;
}
Я попробовал все на своем опыте, но это не сработало.И есть ли более простой способ сделать это?Я прошу прощения за мою неопытность и длинный пост!