Bảo vệ chuỗi kết nối trong ASP.Net


Một đoạn code nhỏ để bảo vệ chuỗi kết nối dữ liệu

 protected void btnEncrypt_Click(object sender, EventArgs e)
    {
        EncryptSection("connectionStrings", "RsaProtectedConfigurationProvider");
    }

    protected void EncryptSection(string section, string provider)
    {
        // Lấy thông tin file web.config của một website
        Configuration config = WebConfigurationManager.OpenWebConfiguration(Request.ApplicationPath);
        // Tham chiếu tới section cần mã hóa trong file web.config
        ConfigurationSection cons = config.GetSection(section);
        // Tiến hành mã hóa
        cons.SectionInformation.ProtectSection(provider);
        // Lưu lại thông tin sau khi mã hóa
        config.Save();
    }
    protected void btnDecrypt_Click(object sender, EventArgs e)
    {
        DecryptSection("connectionStrings");
    }

    protected void DecryptSection(string section)
    {
        // Lấy thông tin file web.config của một website
        Configuration config = WebConfigurationManager.OpenWebConfiguration(Request.ApplicationPath);
        // Tham chiếu tới section cần mã hóa trong file web.config
        ConfigurationSection cons = config.GetSection(section);
        cons.SectionInformation.UnprotectSection();
        config.Save();
    }

 

c# – cấp quyền Administrator cho ứng dụng khi chạy


Trong quá trình đóng gói ứng dụng bằng công nghệ ClickOne thì việc sử dụng trong file app.manifest là thể được do ClickOne không hỗ trợ.
Trong trương hợp này đòi hỏi phải sử dụng code gọi lệnh của window shell để cấp quyền cho process hiện tại.

đoạn code mẫu sau đây sẽ giúp chúng ta thực hiện công việc trên.

static class Program
{
    [STAThread]
    static void Main()
    {
        // Check if user is NOT admin
        if (!IsRunningAsAdministrator())
        {
            // Mở thêm chương trình hiện tại
            ProcessStartInfo processStartInfo = new ProcessStartInfo(Assembly.GetEntryAssembly().CodeBase);
            // chạy proccess với quyền Administrator chạy bằng lệnh shell của window
            // ProcessStartInfo.Verb để chạy “runas administrator”
            processStartInfo.UseShellExecute = true;
            processStartInfo.Verb = "runas";
            // Chạy process đã cấp quyền
            Process.Start(processStartInfo);
            // đóng ứng dụng cũ
            System.Windows.Forms.Application.Exit();
        }
    }

    ///
<summary>
    /// Kiểm tra tài khoản hiện tại có quyền Adnistrator khôg
    /// </summary>

    /// <returns>True nếu có quyền Administrator</returns>
    public static bool IsRunningAsAdministrator()
    {
        // Lấy tài khoản hiện tại
        WindowsIdentity windowsIdentity = WindowsIdentity.GetCurrent();
        // Sử dụng hệ thống tài khoản của hệ điều hành window hiện tại
        WindowsPrincipal windowsPrincipal = new WindowsPrincipal(windowsIdentity);
        // Kiểm tra quyền quan trị "Administrator"
        return windowsPrincipal.IsInRole(WindowsBuiltInRole.Administrator);
    }

Good luck.

c# – Mã hóa và giải mã thông tin với mật khẩu


Trong quá trình phát triển ứng dụng việc bảo vệ nội dung các file cấu hình là rất cần thiết, trong bài này tôi giới thiệu với các bạn một đoạn code nhỏ giúp mã hóa và giải mã có sử dụng mật khẩu để mã hóa.

Khai báo mật khẩu như sau:

string key = "2giotoitaigoccayda";

Viết hàm sau để mã hóa:

/// <summary>
        /// Mã hóa chuỗi có mật khẩu
        /// </summary>
        /// <param name="toEncrypt">Chuỗi cần mã hóa</param>
        /// <returns>Chuỗi đã mã hóa</returns>
        public static string Encrypt(string toEncrypt)
        {
            bool useHashing = true;
            byte[] keyArray;
            byte[] toEncryptArray = UTF8Encoding.UTF8.GetBytes(toEncrypt);

            if (useHashing)
            {
                MD5CryptoServiceProvider hashmd5 = new MD5CryptoServiceProvider();
                keyArray = hashmd5.ComputeHash(UTF8Encoding.UTF8.GetBytes(key));
            }
            else
                keyArray = UTF8Encoding.UTF8.GetBytes(key);

            TripleDESCryptoServiceProvider tdes = new TripleDESCryptoServiceProvider();
            tdes.Key = keyArray;
            tdes.Mode = CipherMode.ECB;
            tdes.Padding = PaddingMode.PKCS7;

            ICryptoTransform cTransform = tdes.CreateEncryptor();
            byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length);

            return Convert.ToBase64String(resultArray, 0, resultArray.Length);
        }

Hàm sau đây để phục hồi dữ liệu:

/// <summary>
        /// Giản mã
        /// </summary>
        /// <param name="toDecrypt">Chuỗi đã mã hóa</param>
        /// <returns>Chuỗi giản mã</returns>
        public static string Decrypt(string toDecrypt)
        {
            bool useHashing = true;
            byte[] keyArray;
            byte[] toEncryptArray = Convert.FromBase64String(toDecrypt);

            if (useHashing)
            {
                MD5CryptoServiceProvider hashmd5 = new MD5CryptoServiceProvider();
                keyArray = hashmd5.ComputeHash(UTF8Encoding.UTF8.GetBytes(key));
            }
            else
                keyArray = UTF8Encoding.UTF8.GetBytes(key);

            TripleDESCryptoServiceProvider tdes = new TripleDESCryptoServiceProvider();
            tdes.Key = keyArray;
            tdes.Mode = CipherMode.ECB;
            tdes.Padding = PaddingMode.PKCS7;

            ICryptoTransform cTransform = tdes.CreateDecryptor();
            byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length);

            return UTF8Encoding.UTF8.GetString(resultArray);
        }

Sử dụng 2 hàm này như sau:

string chuoimahoa = Encrypt("abc");
......
string chuoigiaima = Decrypt(chuoimahoa);

Hi vọng sẽ hữu ích với bạn.

Kiểm tra kết nối mạng (c#)


Sử dụng C# kiểm tra kết nối với một máy khác. Sử dụng viện PingRely.

/// <summary>
/// Kiểm tra khả năng liên lạc với server
/// </summary>
/// <param name="hostNameOrAddress">Tên server hay IP</param>
/// <returns>True nếu liên lạc được</returns>
public static bool PingNetwork(string hostNameOrAddress)
{
    bool pingStatus = false;

    using (Ping p = new Ping())
    {
        string data = "hello";
        byte[] buffer = Encoding.ASCII.GetBytes(data);
        int timeout = 120;
        try
        {
            PingReply reply = p.Send(hostNameOrAddress, timeout, buffer);
            pingStatus = (reply.Status == IPStatus.Success);
        }
        catch (Exception)
        {
            pingStatus = false;
        }
    }

    return pingStatus;
}

Một công cụ chuyển đổi rất hữu ích


Convert .NET (Based on .NET 4.5)

Convert .NET phát triển một công cụ tích hợp, mạnh mẽ, đa mục đích chuyển đổi.  Các tính năng: C # sang VB và ngược lại, LINQ tester, mã hóa / giải mã, Regular Expression tester, Base64 Encoding / Decoding và dịch văn bản đầy đủ.

Xem chi tiet tai day

Snap152

Voi cong cu nay viet chuyen doi qua lai giua cac ngon ngu tro nen vo cung nhanh chong va chinh xac.

 

SyndicationFeed – Đọc RSS với .Net 4.0 trở nên đơn giản


Sử dụng thư viện System.ServiceModel với 02 lớp

System.ServiceModel.Syndication.SyndicationFeed;
System.ServiceModel.Syndication.SyndicationItem;

Code ví dụ

List<SyndicationItem> rss = new List<SyndicationItem>(); 
string url = "http://vnexpress.net/rss/the-thao.rss";
XmlReader xmlreader = XmlReader.Create(url);
SyndicationFeed rssfeed = SyndicationFeed.Load(xmlreader);
xmlreader.Close();

foreach (SyndicationItem item in rssfeed.Items)
{
    rss.Add(item);
}

Demo ví dụ:
Untitled

Untitled1

Mã nguồn demo

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Drawing;
using System.Linq;
using System.ServiceModel.Syndication;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Xml;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        List<SyndicationItem> rss;
        public Form1()
        {
            InitializeComponent();
            this.listBox1.MouseDoubleClick += new System.Windows.Forms.MouseEventHandler(this.listBox1_MouseDoubleClick);
            this.button1.Click += new System.EventHandler(this.button1_Click);
        }

        private void Form1_Load(object sender, EventArgs e)
        {

        }

        private void load()
        {
            rss = new List<SyndicationItem>(); 
            string url = textBox1.Text;
            XmlReader xmlreader = XmlReader.Create(url);
            SyndicationFeed rssfeed = SyndicationFeed.Load(xmlreader);
            xmlreader.Close();

            foreach (SyndicationItem item in rssfeed.Items)
            {
                rss.Add(item);
                listBox1.Items.Add(item.Title.Text);
            }
        }

        private void button1_Click(object sender, EventArgs e)
        {
            load();
        }

        private void listBox1_MouseDoubleClick(object sender, MouseEventArgs e)
        {
            if (listBox1.SelectedItem == null)
                return;

            if (e.Clicks == 2)
            {
                Process.Start(rss[listBox1.SelectedIndex].Links[0].Uri.ToString());
            }
        }

    }
}