CSharp · Console
using System;
using System.Linq;
using System.Text ;
using System.IO;
using System.Security.Cryptography;
public class Program
{
static public string EncodeTo64(string toEncode)
{
byte[] toEncodeAsBytes
= System.Text.ASCIIEncoding.ASCII.GetBytes(toEncode);
string returnValue
= System.Convert.ToBase64String(toEncodeAsBytes);
return returnValue;
}
public static string Encrypt(string data, string key, string iv)
{
//===== data
var bytes = Encoding.UTF8.GetBytes(data);
//===== AES provider
var provider = new AesCryptoServiceProvider();
provider.Mode = CipherMode.CBC;
provider.Key = Encoding.UTF8.GetBytes(key);
provider.IV = Encoding.UTF8.GetBytes(iv);
var transform = provider.CreateEncryptor();
//===== encrypt
using (var ms = new MemoryStream())
{
using (var cs = new CryptoStream(ms, transform, CryptoStreamMode.Write))
{
cs.Write(bytes, 0, bytes.Length);
cs.FlushFinalBlock();
}
//===== encrypted data
var sb = new StringBuilder();
foreach (var b in ms.ToArray())
{
sb.Append(b.ToString("X2"));
}
return sb.ToString();
}
}
public static string Decrypt(string hexString, string key, string iv)
{
var bytes = Enumerable.Range(0, hexString.Length)
.Where(x => x % 2 == 0)
.Select(x => Convert.ToByte(hexString.Substring(x, 2), 16))
.ToArray();
//===== AES provider
var provider = new AesCryptoServiceProvider();
provider.Mode = CipherMode.CBC;
provider.Key = Encoding.UTF8.GetBytes(key);
provider.IV = Encoding.UTF8.GetBytes(iv);
var transform = provider.CreateDecryptor();
using (var ms = new MemoryStream(bytes))
{
using (var cs = new CryptoStream(ms, transform, CryptoStreamMode.Read))
{
using (var sr = new StreamReader(cs))
{
cs.Flush();
var plainText = sr.ReadToEnd();
return plainText;
}
}
}
}
public static void Main()
{
//working
var key = "36D65EA1F6A849AF9964E0BAA98096B3";
var iv = "8E394493F1E54545";
var encrypted = Encrypt("testing", key, iv);
Console.WriteLine(encrypted);
var decrypted = Decrypt(encrypted ,key, iv);
Console.WriteLine(decrypted);
//attempting to use a ruby-generated key/iv
key = "65125495c896b9e73a7a79fd7ed21be034a05596d3c7d0b865fc40a67ccbdd03";
iv = "4b1e02d778aa1131e0612ff2dc2f9c49";
encrypted = Encrypt("testing", key, iv);
Console.WriteLine(encrypted);
decrypted = Decrypt(encrypted ,key, iv);
Console.WriteLine(decrypted);
}
}