2015-01-11 2 views
1

텍스트 상자에서 입력 한 데이터를 암호화하는 방법을 모르겠습니다. 입력 된 데이터는 DataGridView 내부의 다음 양식에 나타납니다. 내 문제는 DataGridView에 나타날 때 데이터를 암호화하려고하는 것입니다. Microsoft Visual Studio 2010에서 C#을 사용하고 있습니다. 감사합니다!텍스트 상자에서 입력 한 데이터를 암호화하는 방법?

frmUsers f2 = new frmUsers(); 

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

public void setGrid() { 

    f2.dataGridView1.Columns.Add("COL1", "Firstname"); 
    f2.dataGridView1.Columns.Add("COL1", "Lastname"); 
    f2.dataGridView1.Columns.Add("COL1", "Email"); 
    f2.dataGridView1.Columns.Add("COL1", "Password"); 
    f2.Show(); 

    f2.dataGridView1.Rows.Add(textBox1.Text, textBox2.Text, textBox3.Text, textBox4.Text, textBox5.Text); 

} 
+0

원하는 암호화 유형은 무엇입니까? – dotctor

+2

가능한 복제본 [C#에서 문자열 암호화 및 암호 해독] (http://stackoverflow.com/questions/10168240/encrypting-decryptinga-a-string-in-c-sharp) –

+0

@dotctor - md5 암호화. – bracket17

답변

1

다음은 지정된 비밀 문구가있는 문자열을 암호화하고 해독하는 코드입니다. 암호를 해독 한 정확한 암호로 암호를 해독해야 함을 명심하십시오.

public static class Crypto 
{ 
    public static string Encrypt(string text, string secret) 
    { 
     if (string.IsNullOrEmpty(text)) 
      throw new ArgumentNullException("text"); 
     if (string.IsNullOrEmpty(secret)) 
      throw new ArgumentNullException("secret"); 

     var salt = Encoding.UTF8.GetBytes(secret); 

     using (var aes = new RijndaelManaged()) 
     { 
      var key = new Rfc2898DeriveBytes(secret, salt); 

      aes.Key = key.GetBytes(aes.KeySize/8); 

      var encryptor = aes.CreateEncryptor(aes.Key, aes.IV); 

      using (var ms = new MemoryStream()) 
      { 
       ms.Write(BitConverter.GetBytes(aes.IV.Length), 0, sizeof(int)); 
       ms.Write(aes.IV, 0, aes.IV.Length); 
       using (var cs = new CryptoStream(ms, encryptor, CryptoStreamMode.Write)) 
       using (var sw = new StreamWriter(cs)) 
       { 
        sw.Write(text); 
       } 
       return Convert.ToBase64String(ms.ToArray()); 
      } 
     } 
    } 

    public static string Decrypt(string cipher, string secret) 
    { 
     if (string.IsNullOrEmpty(cipher)) 
      throw new ArgumentNullException("cipher"); 
     if (string.IsNullOrEmpty(secret)) 
      throw new ArgumentNullException("secret"); 

     var salt = Encoding.UTF8.GetBytes(secret); 

     using (var aes = new RijndaelManaged()) 
     { 
      var key = new Rfc2898DeriveBytes(secret, salt); 

      var bytes = Convert.FromBase64String(cipher); 
      using (var ms = new MemoryStream(bytes)) 
      { 
       aes.Key = key.GetBytes(aes.KeySize/8); 
       aes.IV = ReadByteArray(ms); 

       var decryptor = aes.CreateDecryptor(aes.Key, aes.IV); 
       using (var cs = new CryptoStream(ms, decryptor, CryptoStreamMode.Read)) 
       using (var sr = new StreamReader(cs)) 
       { 
        return sr.ReadToEnd(); 
       } 
      } 
     } 
    } 

    private static byte[] ReadByteArray(Stream s) 
    { 
     var rawLength = new byte[sizeof(int)]; 
     if (s.Read(rawLength, 0, rawLength.Length) != rawLength.Length) 
     { 
      throw new SystemException("Stream did not contain properly formatted byte array"); 
     } 

     var buffer = new byte[BitConverter.ToInt32(rawLength, 0)]; 
     if (s.Read(buffer, 0, buffer.Length) != buffer.Length) 
     { 
      throw new SystemException("Did not read byte array properly"); 
     } 

     return buffer; 
    } 
} 
관련 문제