2011-06-03 30 views
0

最後我嘗試使用mysql中的加密和壓縮函數來獲取安全密碼和用戶名。如何使用DES_DECRYPT()函數從mysql中獲取數據?

DES_ENCRYPT函數完全適用於加密。我給我用來加密和保存在數據庫中的代碼。

MySqlConnection connection = new MySqlConnection(MyConString); 
       MySqlCommand command = connection.CreateCommand(); 
       command.CommandText = "insert into user (User_Id, Password, Branch, Upto_Date) values (DES_ENCRYPT('" + textBox1.Text + "'),DES_ENCRYPT('" + textBox2.Text + "'),'" + comboBox1.SelectedItem.ToString() + "','" + textBox4.Text + "') "; 
       connection.Open(); 
       command.ExecuteNonQuery(); 
       MessageBox.Show("Record Succesfully Added", "Information", MessageBoxButtons.OK, MessageBoxIcon.Information); 
       connection.Close(); 

但我無法在DES_DECRYPT函數中檢索數據。

我試"select DES_DECRYPT(User_Id),DES_DECRYPT(Password),Branch,Upto_Date from user" 代碼檢索但沒有用。我做什麼從MySQL數據表中獲取數據?

My sql datable

的最後一個記錄,使用DES_ENCRYPT()函數插入。

回答

1

DES_DECRYPT是解密DES_ENCRYPT ed數據的方式。

讓我們堅持SQL的一部分。簡單的例子:

/* generating test table */ 
CREATE TABLE `test` (
    `testField` varchar(512) DEFAULT NULL 
) ENGINE=InnoDB DEFAULT CHARSET=latin1 

/* adding some test data to it */ 
INSERT INTO test() VALUES (DES_ENCRYPT("Hello")), (DES_ENCRYPT("World")); 

我們發現它怎麼看加密...

SELECT testField FROM test; 

+-------------+ 
| testField | 
+-------------+ 
| €p!˜*D°k | 
| €ü«ü€D»Ûë | 
+-------------+ 

...和解密吧!

SELECT DES_DECRYPT(testField) FROM test; 

+-------------+ 
| testField | 
+-------------+ 
| Hello  | 
| World  | 
+-------------+ 

基本上,如果你這樣解密爲你所描述的,數據庫應返回純文本。

我的建議是:

  1. 嘗試啓動第一搞清楚了這一點SQL一邊(phpMyAdmin的,SQLyog的,有大量的工具,MySQL數據庫的直接工作)。
  2. 如果這是行得通的,請轉到您的.NET程序來完成此操作。

另一個說明,如果您使用這種密碼保護,則在您的應用程序和數據庫服務器之間使用明確的密碼。即使這種連接可能是SSL-「受保護」的,我建議不要這樣做。爲此目的使用散列算法(如SHA512)通常比較安全,只需將Hashes存儲在數據庫中以避免清除密碼。

+0

我沒有足夠的時間做哈希!所以只有我切換到這個。任何方式謝謝你。 – Sagotharan 2011-06-03 09:38:12

+0

任何加密都比在數據庫中存儲普通密碼更好! ;-) – Bjoern 2011-06-03 09:45:05

相關問題