NHIBERNATE LÀ GÌ

Đôi khi khi áp dụng Nhibernate để cách tân và phát triển áp dụng website xuất xắc vận dụng winform họ thường bỏ chuỗi liên kết ở file hibernate.cfg.xml , bản thân thấy bỏ nạm nào ko an ninh buộc phải sau khi google với tò mò tôi đã tìm thấy phương pháp để cho vào webconfig cùng mã hóa chuỗi kết nối này mang lại nó bình yên nhằm mục tiêu rời shell

*

Đôi khi thì chuỗi liên kết cửa hàng tài liệu hay vứt làm việc file hibernate.cfg.xml nhỏng sau :

Chuỗi liên kết đại lý dữ liệu sinh sống đây

Để mã hóa chuỗi kết nối ta viết một tấm là Crypto để mã hóa với lời giải trước đã

public static class Cryplớn const string InitialVector = "4AQYuEmZ3Q7gNHdj"; public static string Encrypt(string data,string pass) if (string.IsNullOrEmpty(data)) return "";

var initialVectorBytes = Encoding.ASCII.GetBytes(InitialVector); var plainTextBytes = Encoding.UTF8.GetBytes(data); var keyBytes = Encoding.ASCII.GetBytes(pass);

var symmetricKey = new RijndaelManaged(); symmetricKey.Mode = CipherMode.CBC; byte cipherTextBytes = null; using (var encryptor = symmetricKey.CreateEncryptor(keyBytes, initialVectorBytes)) using (var memStream = new MemoryStream()) using (var cryptoStream = new CryptoStream(memStream, encryptor, CryptoStreamMode.Write)) cryptoStream.Write(plainTextBytes, 0, plainTextBytes.Length); cryptoStream.FlushFinalBlock(); cipherTextBytes = memStream.ToArray(); memStream.Close(); cryptoStream.Close(); symmetricKey.Clear(); return Convert.ToBase64String(cipherTextBytes); public static string Decrypt(string data,pass) if (string.IsNullOrEmpty(data)) return "";

var initialVectorBytes = Encoding.ASCII.GetBytes(InitialVector); var cipherTextBytes = Convert.FromBase64String(data); var keyBytes = Encoding.ASCII.GetBytes(pass);

var symmetricKey = new RijndaelManaged(); symmetricKey.Mode = CipherMode.CBC; var plainTextBytes = new byte; var byteCount = 0; using (var decryptor = symmetricKey.CreateDecryptor(keyBytes, initialVectorBytes)) using (var memStream = new MemoryStream(cipherTextBytes)) using (var cryptoStream = new CryptoStream(memStream, decryptor, CryptoStreamMode.Read)) byteCount = cryptoStream.Read(plainTextBytes, 0, plainTextBytes.Length); memStream.Close(); cryptoStream.Close(); symmetricKey.Clear(); return Encoding.UTF8.GetString(plainTextBytes, 0, byteCount);

Mục đích của lớp này là mã hóa theo pass và giải mã theo pass một chuỗi, mục đích là mã hóa chuỗi kết nối.

Để sửa lại cách thức lấy chuỗi liên kết ta override lại lớp NHibernate.Connection.DriverConnectionProvider như sau :

public class MyConnectionProvider : NHibernate.Connection.DriverConnectionProvider static string conn = ""; protected override string ConnectionString get if (string.IsNullOrEmpty(conn))

string connectionString = ConfigurationManager.ConnectionStrings.ConnectionString; conn= Crypkhổng lồ.Decrypt(connectionString,"sokhanh03"); return conn;

Sửa file hibernate.cfg.xml nhỏng sau :

(Name space của MyConnectionProvider).MyConnectionProvider,Name space của MyConnectionProvider

Chụ ý comment lại mẫu NHibernate.Connection.DriverConnectionProvider

Sau đó vào file webconfig giỏi app.config sửa lại thành :

Như vậy ta đã đưa chuỗi liên kết trường đoản cú tệp tin hibernate.cfg.xml quý phái tệp tin webconfig(phầm mềm.config) đã mã hóa, sau đó triển khai code thông thường.

Mục đích của việt này là rời câu hỏi bị shell gọi file webconfig cùng lấy chuỗi kết nối