2015-07-15 2 views
0

У меня есть следующий Java файл:3DES base64 шифровать в Java и C#

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#.

Я не знаю, где моя ошибка. Спасибо за помощь.

+1

Есть ли ошибка компиляции? Что значит «невозможно воспроизвести выход»? – robertjlooby

+1

Каков вход и желаемый выход, чтобы мы могли его использовать для тестирования? – Cory

+0

Привет, Если вы запустите java-код, это строка Base64.decodeBase64 (cadena.getBytes («ISO-8859-1»)); показывает массив байтов, который отличается от байтового массива, генерируемого Encoding.UTF8.GetBytes (System.Text.Encoding.UTF8.GetString (System.Convert.FromBase64String (toEncode))); –

ответ

0

Как это:

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

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

Спасибо за вашу помощь, это именно то, что я ищу. –

+0

Рад помочь, пожалуйста, поддержите мой ответ, спасибо. – BhavO

Смежные вопросы