لماذا لا تستطيع C # فك تشفير الإخراج من Crypt Perl :: Rijndael؟

StackOverflow https://stackoverflow.com/questions/569871

سؤال

تم تشفير ملف بواسطة بيرل. فشلت محاولات فك التشفير الأولي وأحاول الآن التأكد مما إذا كان هناك أي hoojoo يحدث (بعض الإعدادات الأخرى المطلوبة)

داف بيرل كود:

use strict;

use Crypt::Rijndael;

my $key ='...';

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

undef $/;
my $encrypted = <>;

print $rcipher->decrypt($encrypted);

ج # تنفيذ فك التشفير

        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();
        }

كيف يجب قراءة رمز بيرل

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);
هل كانت مفيدة؟

المحلول

أنا موافقة بيرل Crypt :: Rijndael.. وبعد لم أكتب التعليمات البرمجية الأصلية، لكنني أحاول أن أجعله يعمل عندما يفشل في أشخاص آخرين.

تلقيت تقرير آخر مثل هذا كما RT # 27632.. وبعد كانت المشكلة في الوحدة النمطية مدتها الدولية تم توقيعها على أنها كانت كثيرة غير موقعة. أحدث نسخة من Crypt :: Rijndael., ، 1.07، يجب أن يكون الإصلاح. ما الإصدار الذي تستخدمه؟

أيضا، بعض هذه المشاكل تعتمد منصة. إذا نظرت إلى رمز Rijndael.h في التوزيع، فسترى الأطواق التي يجب أن أقفز للحصول عليها للحصول على أحجام النوع المناسبة لمنصات مختلفة. أنا الرقم أنت على ويندوز (ولكن ليس cygwin). أي إصدار من Windows الذي تستخدمه؟

كما لوحظ في تذكرة RT، تتمثل الخطوة الأولى في تشفير الرسائل نفسها بنفس متجاول التهيئة نفسها باستخدام كليهما Crypt :: Rijndael. والتنفيذ C #. يجب أن تحصل على نفس الإخراج. إذا لم تحصل على نفس crypttext، فهناك مشكلة.

اسمحوا لي أن أعرف كيف يعمل هذا لك حتى أتمكن من تتبع ذلك ك Crypt :: Rijndael. خطأ إذا كنت بحاجة إلى ذلك.

شكرا،

نصائح أخرى

أنا أفترض أنك تقوم بتشغيل هذا على Windows. أنت تتعامل مع البيانات الثنائية، لذلك عليك أن تأخذ ذلك في الاعتبار. في بيرل، يجب عليك استخدام بنمود. وبعد أعتقد أنك بحاجة إلى استخدام BinaryReader في C # (لكنني لا مبرمج C #، لذلك لست متأكدا).

هل لديك نفس الأحجام الرابعة؟ أنا أسأل كما كان لدي مشاكل مماثلة مع بيرل لتحويل التشفير C #، حيث كان حجم الرابع مختلفا في بيرل.

Keysize الخاص بك هو 256 (بت) ولكن المفتاح الذي لديك في رمز PERL هو 3 بايت، 12 بت إذا كنت أتذكر perl منصاتها مع مساحة بيضاء.

هل حاولت تشفير / فك تشفير سلسلة بسيطة؟ مع ذلك، يمكنك التحقق من أن هناك شيء ما في التشفير (وليس مع قراءة الملف).

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top