3DES base64加密在java和c#

本文关键字:java base64 加密 3DES | 更新日期: 2023-09-27 18:02:47

我有下一个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"))的输出;

我不知道我错在哪里。谢谢你的帮助。

3DES base64加密在java和c#

像这样:

var iso8859_1 = System.Text.Encoding.GetEncoding("iso-8859-1"); 
var bytes = Convert.FromBase64String(iso8859.GetString(iso8859_1.GetBytes(cadena)));