using System.Security.Cryptography;
using System.Collections.Generic;
private static string ValidChars = "QAZ2WSX3" + "EDC4RFV5" + "TGB6YHN7" + "UJM8K9LP";
var nextChallenge="BLME1234";
var hexString = string.Join("",nextChallenge.Select(c => String.Format("{0:X2}", Convert.ToInt32(c))));
Console.WriteLine(hexString);
byte[] plainBytes = Encoding.UTF8.GetBytes(Plain);
Console.WriteLine("plaintext length is " + plainBytes.Length);
Console.WriteLine("Plaintext is " + BitConverter.ToString(plainBytes));
byte [] savedKey = new byte[16];
byte [] savedIV = new byte[16];
using (RijndaelManaged Aes128 = new RijndaelManaged())
Aes128.Mode = CipherMode.CFB;
Aes128.Padding = PaddingMode.None;
Aes128.Key.CopyTo(savedKey, 0);
Aes128.IV.CopyTo(savedIV, 0);
using (var encryptor = Aes128.CreateEncryptor())
using (var msEncrypt = new MemoryStream())
using (var csEncrypt = new CryptoStream(msEncrypt, encryptor, CryptoStreamMode.Write))
using (var bw = new BinaryWriter(csEncrypt, Encoding.UTF8))
cipherBytes = msEncrypt.ToArray();
foreach(var encoding in Encoding.GetEncodings())
Console.WriteLine(encoding.Name+ ":" + Encoding.GetEncoding(encoding.Name).GetString(cipherBytes));
using (RijndaelManaged Aes128 = new RijndaelManaged())
Aes128.Mode = CipherMode.CFB;
Aes128.Padding = PaddingMode.None;
using (var decryptor = Aes128.CreateDecryptor())
using (var msEncrypt = new MemoryStream(cipherBytes))
using (var csEncrypt = new CryptoStream(msEncrypt, decryptor, CryptoStreamMode.Read))
using (var br = new BinaryReader(csEncrypt, Encoding.UTF8))
plainBytes = br.ReadBytes(cipherBytes.Length);
public static string GetStringFromByteArray(byte[] data)
string mapping = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvqwxyz";
BigInteger base10 = new BigInteger(data);
Console.WriteLine(base10);
int baseInt=mapping.Length;
var result = new Stack<char>();
result.Push(mapping[(int)(base10 % baseInt)]);
baseX = new string(result.ToArray());
public static string ToBase32String(byte[] bytes) {
StringBuilder sb = new StringBuilder();
while (currentByte < bytes.Length) {
index = (byte)(bytes[currentByte++] >> (hi - 5));
if (currentByte != bytes.Length) {
index = (byte)(((byte)(bytes[currentByte] << (16 - hi)) >> 3) | index);
index = (byte)(bytes[currentByte++] >> 3);
index = (byte)((byte)(bytes[currentByte] << (8 - hi)) >> 3);
sb.Append(ValidChars[index]);
public static void Main(string[] args)