Visualizzazione dei risultati da 1 a 4 su 4

Discussione: [C#] Decrypt stringa

  1. #1
    Utente di HTML.it
    Registrato dal
    Apr 2004
    Messaggi
    19

    Decrypt stringa

    Ciao

    Non riesco a decryptare i c# una stringa cryptata da java.
    L'errore è "Dati non validi". Presumo sia un problema di encoding ma non ne sono sicuro.

    Provo a postare il codice nella speranza che qualcuno sappia aiutarmi in merito.

    Saluti
    Michele

    -----------------------------------------------------------------------------------
    Codice Java
    -----------------------------------------------------------------------------------
    private static SecretKey key = null;
    private static Cipher cipher = null;
    byte[] keyBytes = "abcdefgh".getBytes("UTF8");
    key = new SecretKeySpec(keyBytes, "DES");
    cipher = Cipher.getInstance("DES");

    byte[] ret = encrypt("CIAO MONDO".getBytes("UTF-8"));
    String s = new String(ret, UTF-8");
    OutputStream fout= new FileOutputStream("c:\\encrypt.txt");
    OutputStream bout= new BufferedOutputStream(fout);
    OutputStreamWriter out = new OutputStreamWriter(bout, "UTF-8");
    out.write(s);
    out.flush();
    out.close();

    public static byte[] encrypt(byte[] inpBytes) throws Exception {
    Cipher cipher = Cipher.getInstance("DES");
    cipher.init(Cipher.ENCRYPT_MODE, key);
    return cipher.doFinal(inpBytes);
    }
    -----------------------------------------------------------------------------------
    Codice C#
    -----------------------------------------------------------------------------------
    SymmetricAlgorithm symmetricAlgorithm = SymmetricAlgorithm.Create("DES");
    symmetricAlgorithm.Key = Encoding.UTF8.getBytes("abcdefgh");
    symmetricAlgorithm.GenerateIV();
    Decrypt(symmetricAlgorithm, "c:\\encrypt.txt", "c:\\encrypt.decripted");

    public static void Decrypt(SymmetricAlgorithm symmetricAlgorithm, String inPath, String outPath)
    {
    ICryptoTransform transform = symmetricAlgorithm.CreateDecryptor();
    Stream inStream = File.OpenRead(inPath);
    CryptoStream cryptoStream = new CryptoStream(inStream, transform, CryptoStreamMode.Read);
    Byte[] buffer = new Byte[8];
    int length = cryptoStream.Read(buffer, 0, buffer.Length);
    Stream outStream = File.OpenWrite(outPath);
    outStream.Write(buffer, 0, length);
    length = cryptoStream.Read(buffer, 0, buffer.Length);
    inStream.Close();
    outStream.Close();
    }

  2. #2
    un primo consiglio e quello di capire se realmente i due algoritmi di crittografia diano lo stesso risultato (io non conosco quello che usa la sorgente (java) ed il destinatario (.net). Per questo motivo crea una routine in dot.net con cui "dato in input una stringa tiri fuori la sua equivalente crittografata", se l'algoritmo è lo stesso dovresti ottenere due stringhe uguali (confrontanto quella ottenuta con quella ottenuta dalla tua funzione java).

    Chi sbaglia, apprende meglio di chi non ha mai commesso errori.
    DOT.NET Addicted since 2006 (My Blog)

  3. #3
    Utente di HTML.it
    Registrato dal
    Apr 2004
    Messaggi
    19
    Ho risolto.

    Grazie per il suggerimento. Il metodo che mi hai suggerito mi è stato d'aiuto: effettivamente l'encrypt in java e l'encrypt in .net non era uguale e di conseguenza l'uno non poteva decryptare l'altro.
    E' indispensabile che Algoritmo, Modo e Padding siano gli stessi. Nel mio caso ho utilizzato nell'ordine DES ECB PKCS5Padding(java) PKCS7Pagging(.net)

    Per ragioni di completezza, posto il codice che ha permesso di risolvere la questione, non si sa mai che possa servire a qualcuno.

    -----------------------------------------------------------------------------------
    Codice Java
    -----------------------------------------------------------------------------------
    private static SecretKey key = null;
    private static Cipher cipher = null;
    private static String algorithm = "DES/ECB/PKCS5Padding";

    byte[] keyBytes = "abcdefgh".getBytes();
    key = new SecretKeySpec(keyBytes, "DES");
    cipher = Cipher.getInstance(algorithm);

    byte[] ret = encrypt("CIAO MONDO".getBytes());
    String s = new String(ret);
    OutputStream fout= new FileOutputStream("c:\\encrypt.txt");
    OutputStream bout= new BufferedOutputStream(fout);
    OutputStreamWriter out = new OutputStreamWriter(bout);
    out.write(s);
    out.flush();
    out.close();

    public static byte[] encrypt(byte[] inpBytes) throws Exception {
    Cipher cipher = Cipher.getInstance(algorithm);
    cipher.init(Cipher.ENCRYPT_MODE, key);
    return cipher.doFinal(inpBytes);
    }
    -----------------------------------------------------------------------------------
    Codice C#
    -----------------------------------------------------------------------------------
    SymmetricAlgorithm symmetricAlgorithm = SymmetricAlgorithm.Create("DES");
    symmetricAlgorithm.Mode = CipherMode.ECB;
    symmetricAlgorithm.Padding = PaddingMode.PKCS7;
    symmetricAlgorithm.Key = stringToByte("abcdefgh");
    Decrypt(symmetricAlgorithm, "c:\\file-java.encrypted", "c:\\file-net.decripted");

    public static void Decrypt(SymmetricAlgorithm symmetricAlgorithm, String inPath, String outPath)
    {
    ICryptoTransform transform = symmetricAlgorithm.CreateDecryptor();
    Stream inStream = File.OpenRead(inPath);
    CryptoStream cryptoStream = new CryptoStream(inStream, transform, CryptoStreamMode.Read);
    Byte[] buffer = new Byte[64];
    int length = cryptoStream.Read(buffer, 0, buffer.Length);
    Stream outStream = File.OpenWrite(outPath);
    outStream.Write(buffer, 0, length);
    inStream.Close();
    outStream.Close();
    }

    public static byte[] stringToByte(String s)
    {
    byte[] b = new byte[s.Length];
    for (int i = 0; i < s.Length; i++)
    {
    b[i] = (byte)s[i];
    }
    return b;
    }

  4. #4
    ok! Tutto bene quel che finisce bene!
    Chi sbaglia, apprende meglio di chi non ha mai commesso errori.
    DOT.NET Addicted since 2006 (My Blog)

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.