I have the next java file:
import java.io.UnsupportedEncodingException;
import java.security.AlgorithmParameters;
import javax.crypto.Cipher;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
import org.apache.commons.codec.binary.Base64;
public class CifrarAyuda_jc {
public static void main(String[] args) {
try {
decodificarBase64("SislaftUAFramework20150730890567");
decodificarBase64("SislaftUA15=");
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/**
* Descencripta un texto encriptado utilizando claves proporcionadas como
* parámetros.
*
* @param textoCifrado
* Texto encriptado y codificado en Base 64
* @param clave1 Clave 1
* @param clave2 Clave 2 vector
* @return Texto desencriptado
* @throws Exception En caso de error en el proceso
*/
/**
* Encripta un texto determinado utilizando claves provistas como argumentos
*
* @param textoNoCifrado
* @param clave1 Clave 1
* @param clave2 Clave 2 vector
* @return Texto encriptador y codificado en Base 64
* @throws Exception En caso de error en el proceso
*/
/**
* Decodificar a base 64
* @param cadena Cadena a decodificar
* @return Array de bytes
*/
private static byte[] decodificarBase64(String cadena){
try {
System.out.println("Cadena Ingresada: " + cadena);
int i =0;
System.out.println("Cadena Antes del Base64.decodeBase64");
for (Byte b:cadena.getBytes("ISO-8859-1")) {
System.out.println("[" + i + "] = " + b);
i+=1;
} // end of for
byte [] arreglo = Base64.decodeBase64(cadena.getBytes("ISO-8859-1"));
System.out.println("Cadena Despues del Base64.decodeBase64");
System.out.println("Cadena Despues del Base64.decodeBase64 " + arreglo.ToString() );
i =0;
for (Byte b:arreglo) {
System.out.println("[" + i + "] = " + b);
i+=1;
} // end of for
return arreglo;
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return null;
}
}
I try to code this in C# using the next function
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Security.Cryptography;
namespace Encripta3DES
{
class Program
{
static void Main(string[] args)
{
//Console.WriteLine(Encriptar("13-07-2015 17:17:23","SislaftUAFramework20150730890567","SislaftUA15="));
EncodeBase64("SislaftUAFramework20150730890567");
Console.ReadLine();
}
public static string EncodeBase64(string toEncode)
{
int i = 0;
Console.WriteLine("Cadena Ingresada: " + toEncode);
//byte[] plainTextBytes = Encoding.GetEncoding("ISO-8859-1").GetBytes(toEncode);
byte[] plainTextBytes = Encoding.UTF8.GetBytes(toEncode);
Console.WriteLine("Cadena Antes del Base64: ");
foreach (Byte b in plainTextBytes.ToArray<Byte>())
{
Console.WriteLine(string.Format("[{0}] = {1}", i++, b.ToString()));
}
Console.WriteLine("Cadena Despues del Base64: ");
plainTextBytes = Encoding.UTF8.GetBytes(System.Text.Encoding.UTF8.GetString(System.Convert.FromBase64String(toEncode)));
i = 0;
foreach (Byte b in plainTextBytes.ToArray<Byte>())
{
Console.WriteLine(string.Format("[{0}] = {1}", i++, b.ToString()));
}
//ENCODE
//System.Convert.ToBase64String(System.Text.Encoding.UTF8.GetBytes(plainTextBytes));
//DECODE
//System.Text.Encoding.UTF8.GetString(System.Convert.FromBase64String(toEncode));
return System.Convert.ToBase64String(plainTextBytes);
}
public static string Encriptar(string mensaje, string clave, string strIv)
{
byte[] key = Encoding.ASCII.GetBytes(EncodeBase64(clave).ToCharArray(), 0, 24);
byte[] iv = Encoding.ASCII.GetBytes(EncodeBase64(strIv).ToCharArray(), 0, 8);
byte[] data = Encoding.ASCII.GetBytes(mensaje);
byte[] enc = new byte[0];
//byte[] dec = new byte[0];
TripleDES tdes = TripleDES.Create();
tdes.IV = iv;
tdes.Key = key;
tdes.Mode = CipherMode.CBC;
tdes.Padding = PaddingMode.PKCS7;
// encryption
ICryptoTransform ict = tdes.CreateEncryptor();
enc = ict.TransformFinalBlock(data, 0, data.Length);
// decryption
//ict = tdes.CreateDecryptor();
//dec = ict.TransformFinalBlock(enc, 0, enc.Length);
return Convert.ToBase64String(enc);
}
}
But I cant reproduce the output of Base64.decodeBase64(cadena.getBytes("ISO-8859-1")); in C# function.
I dont know where is my mistake. Thanks for your help.