3DES base64 在 java 和 c# 中加密

3DES base64 encrypt in java and c#

我有下一个 java 文件:

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;
  }
}

我尝试使用下一个函数在 C# 中对此进行编码

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);


        }


    }

但我无法重现 Base64.decodeBase64(cadena.getBytes("ISO-8859-1")); 的输出在 C# 函数中。

我不知道我哪里错了。 感谢您的帮助。

像这样:

var iso8859_1 = System.Text.Encoding.GetEncoding("iso-8859-1"); 

var bytes = Convert.FromBase64String(iso8859.GetString(iso8859_1.GetBytes(cadena)));