1

ファイルは Perl によって暗号化されています。最初の復号化の試みは失敗しました。現在、フージューが発生しているかどうかを確認しようとしています (他の設定が必要です)。

ダフ 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# 復号化の実装

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

Perl コードの読み方

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);
4

4 に答える 4

4

同じIVサイズを持っていますか?Perl から C# への暗号化変換で、Perl では IV サイズが異なるという同様の問題が発生したため、質問しています。

KeySize は 256 (ビット) ですが、Perl コードにあるキーは 3 バイト (12 ビット) で、覚えていれば Perl は空白でパディングします。

于 2009-02-20T15:28:34.457 に答える
4

これをWindowsで実行すると仮定しています。バイナリデータを扱っているので、それを考慮する必要があります。Perl では、binmodeを使用する必要があります。C# で BinaryReader を使用する必要があると思います (ただし、私は C# プログラマーではないため、よくわかりません)。

于 2009-02-20T15:17:45.060 に答える