RISOLTO problema piccolo criptatore c#

Stato
Discussione chiusa ad ulteriori risposte.

scorpio3

Nuovo Utente
91
2
Ho seguito una piccola guida in cui veniva mostrato come criptare una stringa di testo. Riutillizzero questo codice per un altro programma.

Codice:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Security.Cryptography;



namespace cypter
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();

            desObj = Rijndael.Create();

        }

        string cipherData; 
        byte[] chipherbytes; 
        byte[] plainbytes; 
        byte[] plainbytes2;
        byte[] plainKey; 

        SymmetricAlgorithm desObj;

        private void button1_Click(object sender, EventArgs e)
        {
            cipherData = testo.Text;
            plainbytes = Encoding.ASCII.GetBytes(cipherData);
            plainKey= Encoding.ASCII.GetBytes("0123456789abcdez"); //deve essere forzatamente di 16 caratteri
           
            desObj.Key = plainKey;
            desObj.Mode = CipherMode.CBC;
            desObj.Padding = PaddingMode.PKCS7;
            System.IO.MemoryStream ms = new System.IO.MemoryStream();
            CryptoStream cs = new CryptoStream(ms, desObj.CreateEncryptor(), CryptoStreamMode.Write);
            cs.Write(plainbytes, 0, plainbytes.Length);
            cs.Close();
            chipherbytes = ms.ToArray();
            ms.Close();
            testo_criptato.Text = Encoding.ASCII.GetString(chipherbytes);

        }

        private void Form1_Load(object sender, EventArgs e)
        {

        }

        private void button2_Click(object sender, EventArgs e)
        {
            System.IO.MemoryStream ms1 = new System.IO.MemoryStream(chipherbytes);
            CryptoStream cs1 = new CryptoStream(ms1, desObj.CreateDecryptor(), CryptoStreamMode.Read);
            cs1.Read(chipherbytes, 0, chipherbytes .Length);
            plainbytes2 = ms1.ToArray();
            cs1.Close();
            ms1.Close();


           string garbage = Encoding.ASCII.GetString(plainbytes2); 
           string decrypt = garbage.Substring(0, plainbytes.Length);
           testo_decriptato.Text = decrypt;

          
        }

        private void button3_Click(object sender, EventArgs e)
        {
     
            System.IO.MemoryStream ms1 = new System.IO.MemoryStream(chipherbytes);
            CryptoStream cs1 = new CryptoStream(ms1, desObj.CreateDecryptor(), CryptoStreamMode.Read);
            cs1.Read(chipherbytes, 0, chipherbytes .Length);
            plainbytes2 = ms1.ToArray();
            cs1.Close();
            ms1.Close();


            string garbage = Encoding.ASCII.GetString(plainbytes2); 
            string decrypt = garbage.Substring(0, plainbytes.Length);
            testo_decriptato.Text = decrypt;



        }
    }
}


nel codice si possono trovare 2 decripter uno è quello della guida e uno è il mio.Nel primo (il suo) lui sfrutta una variabile ms questo metodo però non mi permette di esportare il testo quindi ho cercato di fare un altro decripter ma con risultati scadenti. qualche anima buona mi puo aiutare
 
M

Mursey

Ospite
Non capisco cosa intendi con esportare.

Hai studiato bene il codice iniziale ?
Di CryptoStream chiami la read invece della write, cosa fa questo CryptoStream ?
Cosa sono chipherbytes e plainbytes2 ?
 

scorpio3

Nuovo Utente
91
2
il progetto finale dovrebbe essere un programma che permette di inviare messaggi criptati. Come puoi vedere il crypter (è questo il codice originale) non permette di esportare il testo poichè se si chiude il programma lo stesso non è in grado di decriptare il testo precedentemente criptato(questo è dovuto a mio avviso alla variabile ms). Questo codice che ho trovato era privo di descrizione perciò è stata mia cura studiarlo al massimo delle mie capacità.

p.s. plainbytes2 è il testo decriptato sotto forma di byte infatti successivamente viene convertito in string e come puoi vedere il garbege viene eliminato (mi sto riferendo alle ultime 3 righe)
 
Ultima modifica:
M

Mursey

Ospite
Come puoi vedere il crypter (è questo il codice originale) non permette di esportare il testo poichè se si chiude il programma lo stesso non è in grado di decriptare il testo precedentemente criptato(questo è dovuto a mio avviso alla variabile ms).

Io nel codice originale vedo un bottone che, se premuto, legge il contenuto di una textbox e scrive il risultato criptato in un'altra textbox.
 
M

Mursey

Ospite
mursey se non capisci il funzionamente dell' algoritmo di decriptazione puoi anche riscriverlo sempre se ne hai voglia

Non e' l'algoritmo quello che non capisco ma cosa vuoi ottenere tu.
Gia' adesso il criptatore e' una scatola nera se lo fai diventare una classe o una dll.

Prende in ingresso una stringa e la converte, non capisco cosa vuoi fare tu.
 

scorpio3

Nuovo Utente
91
2
ah allora scusa, mi spiego meglio la questione è piu facile di quanto immaggini. Vorrei fare una chat che permette di mandare messaggi criptati quindi il programma deve semplicemente leggere il messaggio che l'utente scrive, criptarlo e spedirlo.L'altro client non deve far altro che leggere il messaggio criptato, decriptarlo e mostrarlo. Il problema è che questo algoritmo di criptazione non posso untilizzarlo perchè seppur cripta il messaggio con successo il destinatario non è in grado di leggere il messaggio decriptato perchè non dispone della variabile ms ma solo del messaggio criptato e la password per decriptarlo. Quindi ricapitolando cerco semplicemente un modo per decriptare il testo contenuto nella textbox senza utilizzare la variabile ms ma che semplicemente lo decripti utilizzando la password poichè l'algoritmo in questa forma mi risulta inutilizzabile
 

scorpio3

Nuovo Utente
91
2
grazie della guida!Effettivamente non sapevo come funzionasse il cryptostream. Quindi come mi consigli di fare per risolvere il mio problema
 
M

Mursey

Ospite
grazie della guida!Effettivamente non sapevo come funzionasse il cryptostream. Quindi come mi consigli di fare per risolvere il mio problema

Nel link c'e' come scrivere e leggere un file, nel tuo caso il codice resta lo stesso tranne la fonte che diventa un System.IO.MemoryStream.
 
Stato
Discussione chiusa ad ulteriori risposte.

Entra

oppure Accedi utilizzando
Discord Ufficiale Entra ora!