using System;
using System.IO;
using System.Security.Cryptography;
using System.Text;
public class Test
{
public static void Main()
{
var tempData = "This is the text to encrypt. It's not much, but it's all there is.";
byte[] iv;
byte[] key;
byte[] encryptedData;
using (var rijCrypto = new RijndaelManaged())
{
rijCrypto.Padding = System.Security.Cryptography.PaddingMode.ISO10126;
rijCrypto.KeySize = 256;
rijCrypto.GenerateIV();
rijCrypto.GenerateKey();
iv = new byte[rijCrypto.IV.Length];
rijCrypto.IV.CopyTo(iv, 0);
key = new byte[rijCrypto.Key.Length];
rijCrypto.Key.CopyTo(key, 0);
using (var input = new MemoryStream(Encoding.Unicode.GetBytes(tempData)))
using (var output = new MemoryStream())
{
var encryptor = rijCrypto.CreateEncryptor();
using (var cryptStream = new CryptoStream(output, encryptor, CryptoStreamMode.Write))
{
var buffer = new byte[1024];
var read = input.Read(buffer, 0, buffer.Length);
while (read > 0)
{
cryptStream.Write(buffer, 0, read);
read = input.Read(buffer, 0, buffer.Length);
}
cryptStream.FlushFinalBlock();
encryptedData = output.ToArray();
}
}
}
using (var rijCrypto = new RijndaelManaged())
{
rijCrypto.Padding = System.Security.Cryptography.PaddingMode.ISO10126;
rijCrypto.KeySize = 256;
rijCrypto.IV = iv;
rijCrypto.Key = key;
using (var input = new MemoryStream(encryptedData))
using (var output = new MemoryStream())
{
var decryptor = rijCrypto.CreateDecryptor();
using (var cryptStream = new CryptoStream(input, decryptor, CryptoStreamMode.Read))
{
var buffer = new byte[1024];
var read = cryptStream.Read(buffer, 0, buffer.Length);
while (read > 0)
{
output.Write(buffer, 0, read);
read = cryptStream.Read(buffer, 0, buffer.Length);
}
cryptStream.Flush();
var result = Encoding.Unicode.GetString(output.ToArray());
Console.WriteLine(result);
}
}
}
}
}
dXNpbmcgU3lzdGVtOwp1c2luZyBTeXN0ZW0uSU87CnVzaW5nIFN5c3RlbS5TZWN1cml0eS5DcnlwdG9ncmFwaHk7CnVzaW5nIFN5c3RlbS5UZXh0OwoKcHVibGljIGNsYXNzIFRlc3QKewoJcHVibGljIHN0YXRpYyB2b2lkIE1haW4oKQoJewoJCXZhciB0ZW1wRGF0YSA9ICJUaGlzIGlzIHRoZSB0ZXh0IHRvIGVuY3J5cHQuIEl0J3Mgbm90IG11Y2gsIGJ1dCBpdCdzIGFsbCB0aGVyZSBpcy4iOwoJCWJ5dGVbXSBpdjsKCQlieXRlW10ga2V5OwoJCWJ5dGVbXSBlbmNyeXB0ZWREYXRhOwoJCXVzaW5nICh2YXIgcmlqQ3J5cHRvID0gbmV3IFJpam5kYWVsTWFuYWdlZCgpKQoJCXsKCQkgICAgcmlqQ3J5cHRvLlBhZGRpbmcgPSBTeXN0ZW0uU2VjdXJpdHkuQ3J5cHRvZ3JhcGh5LlBhZGRpbmdNb2RlLklTTzEwMTI2OwoJCSAgICByaWpDcnlwdG8uS2V5U2l6ZSA9IDI1NjsKCQkgICAgcmlqQ3J5cHRvLkdlbmVyYXRlSVYoKTsKCQkgICAgcmlqQ3J5cHRvLkdlbmVyYXRlS2V5KCk7CgkJICAgIGl2ID0gbmV3IGJ5dGVbcmlqQ3J5cHRvLklWLkxlbmd0aF07CgkJICAgIHJpakNyeXB0by5JVi5Db3B5VG8oaXYsIDApOwoJCSAgICBrZXkgPSBuZXcgYnl0ZVtyaWpDcnlwdG8uS2V5Lkxlbmd0aF07CgkJICAgIHJpakNyeXB0by5LZXkuQ29weVRvKGtleSwgMCk7CgoJCSAgICB1c2luZyAodmFyIGlucHV0ID0gbmV3IE1lbW9yeVN0cmVhbShFbmNvZGluZy5Vbmljb2RlLkdldEJ5dGVzKHRlbXBEYXRhKSkpCgkJICAgIHVzaW5nICh2YXIgb3V0cHV0ID0gbmV3IE1lbW9yeVN0cmVhbSgpKQoJCSAgICB7CgkJICAgICAgICB2YXIgZW5jcnlwdG9yID0gcmlqQ3J5cHRvLkNyZWF0ZUVuY3J5cHRvcigpOwoJCQoJCSAgICAgICAgdXNpbmcgKHZhciBjcnlwdFN0cmVhbSA9IG5ldyBDcnlwdG9TdHJlYW0ob3V0cHV0LCBlbmNyeXB0b3IsIENyeXB0b1N0cmVhbU1vZGUuV3JpdGUpKQoJCSAgICAgICAgewoJCSAgICAgICAgICAgIHZhciBidWZmZXIgPSBuZXcgYnl0ZVsxMDI0XTsKCQkgICAgICAgICAgICB2YXIgcmVhZCA9IGlucHV0LlJlYWQoYnVmZmVyLCAwLCBidWZmZXIuTGVuZ3RoKTsKCQkgICAgICAgICAgICB3aGlsZSAocmVhZCA+IDApCgkJICAgICAgICAgICAgewoJCSAgICAgICAgICAgICAgICBjcnlwdFN0cmVhbS5Xcml0ZShidWZmZXIsIDAsIHJlYWQpOwoJCSAgICAgICAgICAgICAgICByZWFkID0gaW5wdXQuUmVhZChidWZmZXIsIDAsIGJ1ZmZlci5MZW5ndGgpOwoJCSAgICAgICAgICAgIH0KCQkgICAgICAgICAgICBjcnlwdFN0cmVhbS5GbHVzaEZpbmFsQmxvY2soKTsKCQkgICAgICAgICAgICBlbmNyeXB0ZWREYXRhID0gb3V0cHV0LlRvQXJyYXkoKTsKCQkgICAgICAgIH0KCQkgICAgfQoJCX0KCgkJdXNpbmcgKHZhciByaWpDcnlwdG8gPSBuZXcgUmlqbmRhZWxNYW5hZ2VkKCkpCgkJewoJCSAgICByaWpDcnlwdG8uUGFkZGluZyA9IFN5c3RlbS5TZWN1cml0eS5DcnlwdG9ncmFwaHkuUGFkZGluZ01vZGUuSVNPMTAxMjY7CgkJICAgIHJpakNyeXB0by5LZXlTaXplID0gMjU2OwoJCSAgICByaWpDcnlwdG8uSVYgPSBpdjsKCQkgICAgcmlqQ3J5cHRvLktleSA9IGtleTsKCQkKCQkgICAgdXNpbmcgKHZhciBpbnB1dCA9IG5ldyBNZW1vcnlTdHJlYW0oZW5jcnlwdGVkRGF0YSkpCgkJICAgIHVzaW5nICh2YXIgb3V0cHV0ID0gbmV3IE1lbW9yeVN0cmVhbSgpKQoJCSAgICB7CgkJICAgICAgICB2YXIgZGVjcnlwdG9yID0gcmlqQ3J5cHRvLkNyZWF0ZURlY3J5cHRvcigpOwoJCSAgICAgICAgdXNpbmcgKHZhciBjcnlwdFN0cmVhbSA9IG5ldyBDcnlwdG9TdHJlYW0oaW5wdXQsIGRlY3J5cHRvciwgQ3J5cHRvU3RyZWFtTW9kZS5SZWFkKSkKCQkgICAgICAgIHsKCQkgICAgICAgICAgICB2YXIgYnVmZmVyID0gbmV3IGJ5dGVbMTAyNF07CgkJICAgICAgICAgICAgdmFyIHJlYWQgPSBjcnlwdFN0cmVhbS5SZWFkKGJ1ZmZlciwgMCwgYnVmZmVyLkxlbmd0aCk7CgkJICAgICAgICAgICAgd2hpbGUgKHJlYWQgPiAwKQoJCSAgICAgICAgICAgIHsKCQkgICAgICAgICAgICAgICAgb3V0cHV0LldyaXRlKGJ1ZmZlciwgMCwgcmVhZCk7CgkJICAgICAgICAgICAgICAgIHJlYWQgPSBjcnlwdFN0cmVhbS5SZWFkKGJ1ZmZlciwgMCwgYnVmZmVyLkxlbmd0aCk7CgkJICAgICAgICAgICAgfQoJCSAgICAgICAgICAgIGNyeXB0U3RyZWFtLkZsdXNoKCk7CgkJICAgICAgICAgICAgdmFyIHJlc3VsdCA9IEVuY29kaW5nLlVuaWNvZGUuR2V0U3RyaW5nKG91dHB1dC5Ub0FycmF5KCkpOwoJCSAgICAgICAgICAgIENvbnNvbGUuV3JpdGVMaW5lKHJlc3VsdCk7CgkJICAgICAgICB9CgkJICAgIH0KCQl9Cgl9Cn0=