Domanda

Un file è stato crittografato da Perl. tentativi Decrypt iniziale è stata respinta e sto ora cercando di accertare se vi sia una hoojoo succedendo (alcune altre impostazioni richieste)

Duff codice Perl:

use strict;

use Crypt::Rijndael;

my $key ='...';

my $rcipher = Crypt::Rijndael->new ($key, Crypt::Rijndael::MODE_CBC());

undef $/;
my $encrypted = <>;

print $rcipher->decrypt($encrypted);

C # decrittografia Attuazione

        CryptoStream decryptor = null;
        StreamReader srDecrypt = null;
        FileStream fsIn = null;
        RijndaelManaged rijndaelCipher = null;
        string fileContents;
        try
        {
            rijndaelCipher = new RijndaelManaged();
            rijndaelCipher.Mode = CipherMode.CBC;
            rijndaelCipher.Key = Encoding.UTF8.GetBytes(Password);
            rijndaelCipher.IV = Encoding.UTF8.GetBytes(Password);
            rijndaelCipher.Padding = PaddingMode.None;

            fsIn = new FileStream(FilePath, FileMode.Open);
            decryptor = new CryptoStream(fsIn, rijndaelCipher.CreateDecryptor(), CryptoStreamMode.Read);
            srDecrypt = new StreamReader(decryptor);
            fileContents = srDecrypt.ReadToEnd();
        }
        finally
        {
            if (decryptor != null)
                decryptor.Close();
            if (fsIn != null)
                fsIn.Close();
            if (srDecrypt != null)
                srDecrypt.Close();

            if (rijndaelCipher != null)
                rijndaelCipher.Clear();
        }

Come codice Perl dovrebbe leggere

binmode OUTF;

my $key ="..."; # Your secret key

my $rcipher = Crypt::Rijndael->new ($key, Crypt::Rijndael::MODE_CBC());

$rcipher->set_iv($key); # You may wish this IV to be something different from the Secret Key

my $plaintext = "Please encrypt me"; # Your string to be encrypted

if(length($plaintext) % 16 != 0 ) {

$plaintext .= ' ' x (16 - (length($plaintext) % 16)); } 

my $rencrypted = $rcipher->encrypt($plaintext);
È stato utile?

Soluzione

Sono il manutentore di Perl Crypt :: Rijndael . Non ho scritto il codice originale, ma cerco di farlo funzionare quando non riesce per gli altri.

Ho ricevuto un altro rapporto come questo come RT # 27632 . Il problema nel modulo era un int firmato che avrebbe dovuto essere un unsigned int. L'ultima versione di Crypt :: Rijndael , 1,07, dovrebbe avere la correzione. Quale versione stai usando?

Inoltre, alcuni di questi problemi sono dipendente dalla piattaforma. Se si guarda nel codice rijndael.h nella distribuzione, vedrete i cerchi devo saltare attraverso per ottenere le dimensioni giusto tipo per varie piattaforme. Immagino che siete su Windows (ma non Cygwin). Quale versione di Windows stai usando?

Come indicato nel biglietto RT, il primo passaggio è quello di crittografare gli stessi messaggi con gli stessi vettori di inizializzazione utilizzando sia Cripta :: Rijndael e l'implementazione C #. Si dovrebbe ottenere lo stesso risultato. Se non si ottiene lo stesso crypttext, c'è un problema.

Fammi sapere come questo funziona per voi in modo da poter tenere traccia di come un Crypt :: Rijndael bug se ne ho bisogno.

Grazie,

Altri suggerimenti

Sto assumendo si esegue questo su Windows. Hai a che fare con dati binari, quindi è necessario tenerne conto. In Perl, è necessario utilizzare binmode . Penso che è necessario utilizzare BinaryReader in C # (ma io non sono un programmatore C #, quindi non sono sicuro).

Avete ottenuto lo stesso IV della misura? Mi sto chiedendo come ho avuto problemi simili con Perl per C # di conversione di crittografia, in cui la dimensione IV era diverso in Perl.

Il tuo KeySize è di 256 (bit), ma la chiave che avete in codice Perl è 3 byte, 12 bit, che se non ricordo Perl pastiglie con lo spazio bianco.

Hai provato a codificare / decodificare una semplice stringa? Con che si potrebbe verificare che la ci sia qualcosa da nella crittografia (e non con la lettura del file).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top