0

I am having some problems decrypting some text sent from PHP in Java. I have already written code that does this for a windows version of the program in C# but I am unfamiliar with Java so this might be more simple than I am making it.

The encryption code in PHP:

function encryptString($plain)
{
   $iv = "12347112549354892543218565456541";
   $ftpSalt = "hjjuoelkdploida";

   $block = mcrypt_get_block_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_CBC);  

   $padding = $block - (strlen($plain) % $block);
   $plain .= str_repeat(chr($padding), $padding);
   $crypttext = mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $ftpSalt, $plain, MCRYPT_MODE_CBC, $iv);
   $crypttext64 = base64_encode($crypttext);

   return $crypttext64;
}

The C# function that decrypts:

static public String doDecryptRJ256(string cypher)
{
    var sRet = "";
    var cypherByte = Decode(cypher);

    var encoding = new UTF8Encoding();
    var Key = encoding.GetBytes(mKey);
    var IV = encoding.GetBytes(mIv);

    using (var rj = new RijndaelManaged())
    {
        try
        {
            rj.Padding = PaddingMode.PKCS7;
            rj.Mode = CipherMode.CBC;
            rj.KeySize = 256;
            rj.BlockSize = 256;
            rj.Key = Key;
            rj.IV = IV;
            var ms = new MemoryStream(cypherByte);

            using (var cs = new CryptoStream(ms, rj.CreateDecryptor(Key, IV), CryptoStreamMode.Read))
            {
                using (var sr = new StreamReader(cs))
                {
                    sRet = sr.ReadLine();
                }
            }
        }
        finally
        {
                rj.Clear();
        }
    }

    return sRet;
 }

}

I have tried various suggestions from the internet but not found any that actually work. THe latest suggestion I tried to another answer was:

            byte[] cipherText = encryptedText.getBytes("UTF-8");

            Cipher cipher = Cipher.getInstance("AES/CBC/NoPadding");
            SecretKeySpec key = new SecretKeySpec(KEY.getBytes("UTF-8"), "AES");
            cipher.init(Cipher.DECRYPT_MODE, key,new IvParameterSpec(IV.getBytes("UTF-8")));
            return new String(cipher.doFinal(cipherText),"UTF-8");

I know similar questions have been asked previously but the solutions (possibly due to my own ignorance) haven't helped me to get this working. I haven't done any encryption work before so there is probably something that I am just not getting.

The code to encrypt and decrypt are within my control so if someone wants to suggest an alternative method for all three languages I am open to changing the encryption method.

Dustybin80
  • 125
  • 6
  • Found this: http://codereview.stackexchange.com/questions/61294/bouncycastle-rijndael-256-implementation and it use Bouncycastle. – NoDataFound Aug 04 '16 at 12:09
  • Thank you, I will have a look at Bouncycastle and see if it can solve the problem. – Dustybin80 Aug 04 '16 at 12:13
  • Possible duplicate of [How to encrypt or decrypt with Rijndael and a block-size of 256 bits?](http://stackoverflow.com/questions/8083144/how-to-encrypt-or-decrypt-with-rijndael-and-a-block-size-of-256-bits) – Artjom B. Aug 04 '16 at 18:39

0 Answers0