I have the sample code using C# .NET Rijndael cryptography encryption, which can decrypt ciphertext "FGgsUwQ1gToX40dfgdfgfdgdfgdfCzEr3wOenxTPMN9jJC" to plain "75.117.87.87".
I have tried to write the reserved method to encrypt plain text "75.117.87.87" to "FGgsUwQ1gToX40dfgdfgfdgdfgdfCzEr3wOenxTPMN9jJC" but not successful (encrypted text is not as same as expectation - , but the result likes in the attached image . Please help me, thank you.
static int Main(string[] args)
{
Decrypt();
Console.WriteLine("########################");
Console.WriteLine("########################");
Encrypt();
Console.ReadLine();
return 0;
}
public static void Decrypt()
{
string ciphertext = "LkbsUwQ1gToX40dYXizgc0BCCCzEr3wOenxTPMN9jJC";
string secretkey = "11111111";
string saltkey = "thekey";
string result = rijndaelDecrypt(ciphertext, secretkey, saltkey);
Console.WriteLine("Cipher text: " + ciphertext);
Console.WriteLine("Decrypted text: " + result);
return;
}
public static string rijndaelDecrypt(string ciphertext, string secretkey, string saltkey)
{
if (string.IsNullOrEmpty(ciphertext))
{
return null;
}
if (string.IsNullOrEmpty(secretkey))
{
return null;
}
ciphertext = "EAAAA" + ciphertext;
RijndaelManaged rijndaelManaged = null;
string result = null;
try
{
Rfc2898DeriveBytes rfc2898DeriveBytes = new Rfc2898DeriveBytes(secretkey, Encoding.ASCII.GetBytes(saltkey));
byte[] buffer = Convert.FromBase64String(ciphertext);
MemoryStream memoryStream = new MemoryStream(buffer);
rijndaelManaged = new RijndaelManaged();
rijndaelManaged.Key = rfc2898DeriveBytes.GetBytes(rijndaelManaged.KeySize / 8);
rijndaelManaged.IV = rb(memoryStream);
ICryptoTransform transform = rijndaelManaged.CreateDecryptor(rijndaelManaged.Key, rijndaelManaged.IV);
CryptoStream cryptoStream = new CryptoStream(memoryStream, transform, CryptoStreamMode.Read);
StreamReader streamReader = new StreamReader(cryptoStream);
result = streamReader.ReadToEnd();
}
catch (Exception)
{
if (rijndaelManaged != null)
{
rijndaelManaged.Clear();
}
return null;
}
finally
{
if (rijndaelManaged != null)
{
rijndaelManaged.Clear();
}
}
return result;
}
public static void Encrypt()
{
string ciphertext = "75.117.87.87";
string secretkey = "1111111";
string saltkey = "thekey";
string result;
RijndaelManaged rijndaelManaged = new RijndaelManaged();
Rfc2898DeriveBytes rfc2898DeriveBytes = new Rfc2898DeriveBytes(secretkey, Encoding.ASCII.GetBytes(saltkey));
rijndaelManaged.Key = rfc2898DeriveBytes.GetBytes(rijndaelManaged.KeySize / 8);
byte[] buffer = EncodeToBytes(ciphertext);
MemoryStream memoryStream = new MemoryStream(buffer);
rijndaelManaged.IV = rfc2898DeriveBytes.GetBytes(rijndaelManaged.BlockSize / 8);
//rijndaelManaged.IV = rb(memoryStream);
ICryptoTransform transform = rijndaelManaged.CreateEncryptor(rijndaelManaged.Key, rijndaelManaged.IV);
CryptoStream cryptoStream = new CryptoStream(memoryStream, transform, CryptoStreamMode.Read);
StreamReader streamReader = new StreamReader(cryptoStream);
result = streamReader.ReadToEnd();
var encryptor = rijndaelManaged.CreateEncryptor(rijndaelManaged.Key, rijndaelManaged.IV);
var msEncrypt = new MemoryStream();
using (var csEncrypt = new CryptoStream(msEncrypt, encryptor, CryptoStreamMode.Write))
using (var swEncrypt = new StreamWriter(csEncrypt))
swEncrypt.Write(result);
result = Convert.ToBase64String(msEncrypt.ToArray());
Console.WriteLine("Plain text: " + ciphertext);
Console.WriteLine("Encrypted text: " + result);
return;
}
private static byte[] rb(Stream s)
{
byte[] array = new byte[4];
if (s.Read(array, 0, array.Length) != array.Length)
{
return null;
}
byte[] array2 = new byte[BitConverter.ToInt32(array, 0)];
if (s.Read(array2, 0, array2.Length) != array2.Length)
{
return null;
}
return array2;
}
private static byte[] EncodeToBytes(string str)
{
byte[] bytes = new byte[str.Length * sizeof(char)];
System.Buffer.BlockCopy(str.ToCharArray(), 0, bytes, 0, bytes.Length);
return bytes;
}