Tuesday, March 8, 2016

Notepad++ for developers

NPPEXEC Plugin

C++ Compiler template

NPP_SAVE
CD $(CURRENT_DIRECTORY)
g++ -std=c++11 $(FILE_NAME)


Sunday, March 6, 2016

How to encrypt and decrypt string in .NET application


public class Encryption
{
 public static string EncryptString(string valueToEncrypt)
 {
  return EncryptString(valueToEncrypt, "My password key");
 }

 public static string DecryptString(string valueToDecrypt)
 {
  return DecryptString(valueToDecrypt, "My password key");
 }

 public static string EncryptString(string valueToEncrypt, string secretPhrase)
 {
  CryptoStream encryptStream = null; // Stream used to encrypt
  RijndaelManaged rijndael = null; // Rijndael provider
  ICryptoTransform rijndaelEncrypt = null; // Encrypting object
  MemoryStream memStream = new MemoryStream(); // Stream to contain data
  byte[] key;
  byte[] IV;
  GenerateKey(secretPhrase, out key, out IV);
  try
  {
   if (valueToEncrypt.Length > 0)
   {
    // Create the crypto objects
    rijndael = new RijndaelManaged();
    rijndael.Key = key;
    rijndael.IV = IV;
    rijndaelEncrypt = rijndael.CreateEncryptor();
    encryptStream = new CryptoStream(
    memStream, rijndaelEncrypt, CryptoStreamMode.Write);

    // Write the encrypted value into memory
    byte[] input = Encoding.UTF8.GetBytes(valueToEncrypt);
    encryptStream.Write(input, 0, input.Length);
    encryptStream.FlushFinalBlock();

    // Retrieve the encrypted value and return it
    return Convert.ToBase64String(memStream.ToArray());
   }
   else
   {
    return "";
   }
  }
  finally
  {
   if (rijndael != null) rijndael.Clear();
   if (rijndaelEncrypt != null) rijndaelEncrypt.Dispose();
   if (memStream != null) memStream.Close();
  }
 }

 public static string DecryptString(string valueToDecrypt, string secretPhrase)
 {
  CryptoStream decryptStream = null; // Stream used to decrypt
  RijndaelManaged rijndael = null; // Rijndael provider
  ICryptoTransform rijndaelDecrypt = null; // decrypting object
  MemoryStream memStream = null; // Stream to contain data
  byte[] key;
  byte[] IV;
  GenerateKey(secretPhrase, out key, out IV);
  try
  {
   if (valueToDecrypt.Length > 0)
   {
    // Create the crypto objects
    rijndael = new RijndaelManaged();
    rijndael.Key = key;
    rijndael.IV = IV;

    //Now decrypt the previously encrypted message using the decryptor
    // obtained in the above step.

    // Write the encrypted value into memory
    byte[] encrypted = Convert.FromBase64String(valueToDecrypt);
    memStream = new MemoryStream(encrypted);


    rijndaelDecrypt = rijndael.CreateDecryptor();
    decryptStream = new CryptoStream(memStream, rijndaelDecrypt, CryptoStreamMode.Read);

    byte[] fromEncrypt = new byte[encrypted.Length];

    //Read the data out of the crypto stream.
    decryptStream.Read(fromEncrypt, 0, fromEncrypt.Length);

    // Retrieve the encrypted value and return it
    string decryptedString = new string(Encoding.UTF8.GetChars(fromEncrypt));
    return decryptedString.TrimEnd(new char[] { '\0' });
   }
   else
   {
    return "";
   }
  }
  finally
  {
   if (rijndael != null) rijndael.Clear();
   if (rijndaelDecrypt != null) rijndaelDecrypt.Dispose();
   if (memStream != null) memStream.Close();
  }
 }

 /// Generates an encryption key based on the given phrase. The 
 /// phrase is hashed to create a unique 32 character (256-bit) 
 /// value, of which 24 characters (192 bit) are used for the
 /// key and the remaining 8 are used for the initialization vector (IV).
 private static void GenerateKey(string secretPhrase, out byte[] key, out byte[] IV)
 {
  // Initialize internal values
  key = new byte[24];
  IV = new byte[16];

  // Perform a hash operation using the phrase. This will 
  // generate a unique 32 character value to be used as the key.
  byte[] bytePhrase = Encoding.ASCII.GetBytes(secretPhrase);
  SHA384Managed sha384 = new SHA384Managed();
  sha384.ComputeHash(bytePhrase);
  byte[] result = sha384.Hash;

  // Transfer the first 24 characters of the hashed value to the key
  // and the remaining 8 characters to the intialization vector.
  for (int index = 0; index < 24; index++) key[index] = result[index];
  for (int index = 24; index < 40; index++) IV[index - 24] = result[index];
 }
}


Encrypt App.config

public static class Encryption
{
 public static void EncryptConnectionStrings()
 {
  Configuration configuration = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
  ConfigurationSection section = configuration.GetSection("connectionStrings");
  if (!section.SectionInformation.IsProtected)
  {
   section.SectionInformation.ProtectSection("DataProtectionConfigurationProvider");
   section.SectionInformation.ForceSave = true;
   configuration.Save(ConfigurationSaveMode.Modified);
  }
 }

 public static void DecryptConnectionStrings()
 {
  Configuration configuration = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
  ConfigurationSection section = configuration.GetSection("connectionStrings");
  if (section.SectionInformation.IsProtected)
  {
   section.SectionInformation.UnprotectSection();
   section.SectionInformation.ForceSave = true;
   configuration.Save(ConfigurationSaveMode.Modified);
  }
 }
}