public static string Encrypt(string plaintext) { byte[] rgbIV = new byte[] { 0x0, 0x1, 0x2, 0x3, 0x5, 0x6, 0x7, 0x8, 0xA, 0xB, 0xC, 0xD, 0xF, 0x10, 0x11, 0x12 };rgbIV; byte[] key = new byte[] { 0x0, 0x1, 0x2, 0x3, 0x5, 0x6, 0x7, 0x8, 0xA, 0xB, 0xC, 0xD, 0xF, 0x10, 0x11, 0x12 };key; //Specify the algorithms key & IV var rijndael = new RijndaelManaged {BlockSizerijndael = 128, IV =BuildRigndaelCommon(out rgbIV, KeySize = 128, Key =out key, Padding = PaddingMode.None}); //convert plaintext into a byte array byte[] plaintextBytes = Encoding.UTF8.GetBytes(plaintext); int BlockSize; BlockSize = 16 * (1 + (plaintext.Length / 16)); Array.Resize(ref plaintextBytes, BlockSize); // fill the remaining space with 0 for (int i = plaintext.Length; i < BlockSize; i++) { plaintextBytes[i] = 0; } byte[] cipherTextBytes = null; //create uninitialized Rijndael encryption obj using (RijndaelManaged symmetricKey = new RijndaelManaged();) { //Call SymmetricAlgorithm.CreateEncryptor to create the Encryptor obj var transform = rijndael.CreateEncryptor(); //Chaining mode symmetricKey.Mode = CipherMode.CFB; //create encryptor from the key and the IV value ICryptoTransform encryptor = symmetricKey.CreateEncryptor(key, rgbIV); //define memory stream to hold encrypted data using (MemoryStream ms = new MemoryStream();) { //define cryptographic stream - contains the transformation key to be used and the mode using (CryptoStream cs = new CryptoStream(ms, encryptor, CryptoStreamMode.Write);) { //encrypt contents of cryptostream cs.Write(plaintextBytes, 0, BlockSize); cs.FlushFinalBlock(); //finish encryting //convert encrypted data from a memory stream into a byte array byte[] cipherTextBytes = ms.ToArray(); //close all streams } ms.Close(); } cs.Close();} //store result as a hex value string hexOutput = BitConverter.ToString(cipherTextBytes).Replace("-", ""); hexOutput = hexOutput.Substring(0, plaintext.Length * 2); //finially return encrypted string return hexOutput; } public static string Decrypt(string disguisedtext) { byte[] rgbIVrgbIV; = new byte[] {key; 0x0, 0x1, 0x2, 0x3, 0x5, 0x6, 0x7, 0x8,BuildRigndaelCommon(out 0xArgbIV, 0xB,out 0xC,key); 0xD, 0xF, 0x10, 0x11, 0x12 }; byte[] keydisguishedtextBytes = newFromHexString(disguisedtext); byte[] { 0x0, 0x1, 0x2, 0x3, 0x5, 0x6, 0x7, 0x8, 0xA, 0xB, 0xC, 0xD, 0xF, 0x10,string 0x11,visiabletext 0x12= }; ""; //Specify thecreate algorithmsuninitialized keyRijndael &encryption IVobj using (var rijndaelsymmetricKey = new RijndaelManaged{BlockSize()) = 128, IV = rgbIV, KeySize = 128,{ Key = key, Padding = PaddingMode.PKCS7 }; //Call SymmetricAlgorithm.CreateEncryptor to byte[]create disguishedtextBytesthe =Encryptor FromHexString(disguisedtext); obj //create uninitialized Rijndael encryption objsymmetricKey.Mode = CipherMode.CFB; RijndaelManaged symmetricKey = new RijndaelManaged(); //create encryptor from the key and the IV //Callvalue SymmetricAlgorithm.CreateEncryptor to create the Encryptor obj // ICryptoTransform symmetricKey.Modeencryptor = CipherModesymmetricKey.CFB; CreateEncryptor(key, rgbIV); ICryptoTransform decryptor = symmetricKey.CreateDecryptor(key, rgbIV); //define memory stream to hold encrypted data using (MemoryStream ms = new MemoryStream(disguishedtextBytes);) { //define cryptographic stream - contains the transformation to be used and the mode using (CryptoStream cs = new CryptoStream(ms, decryptor, CryptoStreamMode.Write);) { byte[] plaintextBytes = new Byte[disguishedtextBytes.Length*2]; Length]; cs.Write(disguishedtextBytes, 0, disguishedtextBytes.Length); cs.FlushFinalBlock(); int decryptedByteCount = cs.Read(plaintextBytes, 0, plaintextBytes.Length); //convert decrypted data from a memory stream into a byte array byte[] visiabletextBytes = ms.ToArray(); //close all streams ms visiabletext = Encoding.CloseUTF8.GetString(visiabletextBytes); } } cs.Close} return visiabletext; } Helper Methods:
private static RijndaelManaged BuildRigndaelCommon(out byte[] rgbIV, out byte[] key) { rgbIV = new byte[] { 0x0, 0x1, 0x2, 0x3, 0x5, 0x6, 0x7, 0x8, 0xA, 0xB, 0xC, 0xD, 0xF, 0x10, 0x11, 0x12 }; stringkey plaintext= new byte[] { 0x0, 0x1, 0x2, 0x3, 0x5, 0x6, 0x7, 0x8, 0xA, 0xB, 0xC, 0xD, 0xF, 0x10, 0x11, 0x12 }; //Specify the algorithms key & IV RijndaelManaged rijndael = Encoding.UTF8.GetString(plaintextBytesnew RijndaelManaged{BlockSize = 128, 0IV = rgbIV, decryptedByteCount)KeySize = 128, Key = key, Padding = PaddingMode.None}; return rijndael; } public static byte[] FromHexString(string visiabletexthexString) { if (hexString == null) { return new byte[0]; } var numberChars = Encoding.UTF8hexString.GetStringLength; var bytes = new byte[numberChars / 2]; for (visiabletextBytesvar i = 0; i < numberChars; i += 2); { / bytes[i / Return2] decrypted= stringConvert.ToByte(hexString.Substring(i, 2), 16); } return plaintext;bytes; }