Convert Java Encryption code to c#
Java Code
String password = "JQH1867g5c6f1629f122fb108b111b1011f11111"; String encrypt_response = AES128.encrypt("Hello", password); System.out.println("encrypt_response = "+ encrypt_response); String dencrypt_response = AES128.decrypt(encrypt_response, password); System.out.println("dencrypt_response = "+ dencrypt_response);
public class AES128 { @SuppressWarnings("null") public static String encrypt(final String word, final String password) { try { byte[] ivBytes; SecureRandom random = new SecureRandom(); byte bytes[] = new byte[20]; random.nextBytes(bytes); byte[] saltBytes = bytes; SecretKeyFactory factory = SecretKeyFactory.getInstance("PBKDF2withHmacSHA1"); PBEKeySpec spec = new PBEKeySpec(password.toCharArray(), saltBytes, 50, 128); SecretKey secretKey = factory.generateSecret(spec); SecretKeySpec secret = new SecretKeySpec(secretKey.getEncoded(), "AES"); Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding"); cipher.init(Cipher.ENCRYPT_MODE, secret); AlgorithmParameters params = cipher.getParameters(); ivBytes = params.getParameterSpec(IvParameterSpec.class).getIV(); byte[] encryptedTextBytes = cipher.doFinal(word.getBytes("UTF-8")); // prepend salt and vi byte[] buffer = new byte[saltBytes.length + ivBytes.length + encryptedTextBytes.length]; System.arraycopy(saltBytes, 0, buffer, 0, saltBytes.length); System.arraycopy(ivBytes, 0, buffer, saltBytes.length, ivBytes.length); System.arraycopy(encryptedTextBytes, 0, buffer, saltBytes.length + ivBytes.length, encryptedTextBytes.length); new Base64(); return new Base64().encodeToString(buffer); } catch (BadPaddingException | InvalidParameterSpecException | NoSuchAlgorithmException | InvalidKeySpecException | NoSuchPaddingException | InvalidKeyException | IllegalBlockSizeException | UnsupportedEncodingException ex2) { final Exception ex = null; final Exception e = ex; return "ER001" + e.toString(); } }
@SuppressWarnings("null") public static String decrypt(final String encryptedText, final String password) { try { Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding"); // strip off the salt and iv ByteBuffer buffer = ByteBuffer.wrap(new Base64().decode(encryptedText)); byte[] saltBytes = new byte[20]; buffer.get(saltBytes, 0, saltBytes.length); byte[] ivBytes1 = new byte[cipher.getBlockSize()]; buffer.get(ivBytes1, 0, ivBytes1.length); byte[] encryptedTextBytes = new byte[buffer.capacity() - saltBytes.length - ivBytes1.length]; buffer.get(encryptedTextBytes); SecretKeyFactory factory = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA1"); PBEKeySpec spec = new PBEKeySpec(password.toCharArray(), saltBytes, 50, 128); SecretKey secretKey = factory.generateSecret(spec); SecretKeySpec secret = new SecretKeySpec(secretKey.getEncoded(), "AES"); cipher.init(Cipher.DECRYPT_MODE, secret, new IvParameterSpec(ivBytes1)); byte[] decryptedTextBytes = null; try { decryptedTextBytes = cipher.doFinal(encryptedTextBytes); } catch (Exception e) { e.printStackTrace(); } return new String(decryptedTextBytes); } catch (NoSuchAlgorithmException | InvalidKeySpecException | NoSuchPaddingException | InvalidKeyException | InvalidAlgorithmParameterException ex2) { final Exception ex = null; final Exception e = ex; return "ER001" + e.toString(); } }
Add C# Code
class Program
{
public string encrypt(string word, string password)
{
try
{
byte[] ivBytes;
Random random = new Random();
byte[] bytes = new byte[20];
random.NextBytes(bytes);
byte[] saltBytes = bytes;
RijndaelManaged rijndaelManaged = new RijndaelManaged();
var keyGen = new Rfc2898DeriveBytes(password, saltBytes, 50);
Rijndael rijndael = Rijndael.Create();
byte[] key = keyGen.GetBytes(rijndael.KeySize / 8);
byte[] AESIV = keyGen.GetBytes(rijndael.BlockSize / 8);
rijndaelManaged.Mode = CipherMode.CBC;
rijndaelManaged.Padding = PaddingMode.PKCS7;
rijndaelManaged.Key = key;
rijndaelManaged.IV = AESIV;
var plainBytes = Encoding.UTF8.GetBytes(word);
byte[] encryptedTextBytes = rijndaelManaged.CreateEncryptor().TransformFinalBlock(plainBytes, 0, plainBytes.Length);
return Convert.ToBase64String(encryptedTextBytes);//new Base64().encodeToString(buffer);
// return Base64.encodeBase64String(buffer);
} catch(Exception ex)
{
return "ER001" + ex.ToString();
}
}
public string decrypt(string encryptedText, string password)
{
try
{
//Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
RijndaelManaged rijndaelManaged = new RijndaelManaged();
// strip off the salt and iv
//ByteBuffer buffer = ByteBuffer.wrap(Encoding.UTF8.GetBytes(encryptedText));
byte[] saltBytes = new byte[20];
byte[] ivBytes1 = new byte[16];
MemoryStream stream = new MemoryStream();
using (BinaryWriter writer = new BinaryWriter(stream))
{
writer.Write(Convert.FromBase64String(encryptedText));
writer.Write(saltBytes, 0, saltBytes.Length);
writer.Write(ivBytes1, 0, ivBytes1.Length);
}
byte[] buffer = stream.ToArray();
byte[] encryptedTextBytes = new byte[16];
var keyGen = new Rfc2898DeriveBytes(password, saltBytes, 50);
//cipher.init(Cipher.DECRYPT_MODE, secret, new IvParameterSpec(ivBytes1));
//Rijndael rijndael = Rijndael.Create();
byte[] key = keyGen.GetBytes(128 / 8);
//byte[] AESIV = keyGen.GetBytes(128 / 8);
rijndaelManaged.Mode = CipherMode.CBC;
rijndaelManaged.Padding = PaddingMode.PKCS7;
rijndaelManaged.Key = key;
rijndaelManaged.IV = ivBytes1;
//return plaintext;
byte[] decryptedTextBytes = null;
try
{
//decryptedTextBytes = cipher.doFinal(encryptedTextBytes);
decryptedTextBytes = rijndaelManaged.CreateDecryptor().TransformFinalBlock(buffer, 0, buffer.Length);
}
catch (Exception ex)
{
return "ERROR 1" + ex.ToString();
}
return Encoding.UTF8.GetString(decryptedTextBytes);
}
catch (Exception ex2) {
return "ER001" + ex2.ToString();
}
}
static void Main(string[] args)
{
Program p = new Program();
string password = "JQH1867g5c6f1629f122fb108b111b1011f11111";
string encrypt_response = p.encrypt("Hello", password);
Console.WriteLine("encrypt_response = " + encrypt_response);
String dencrypt_response = p.decrypt(encrypt_response, password);
Console.WriteLine("dencrypt_response = " + dencrypt_response);
Console.ReadLine();
}
}
Can anyone help me with this conversion of code.