文件已被Perl加密。最初的解密尝试失败,我现在试图确定是否有任何声音(需要一些其他设置)

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

最佳答案

我是Perl Crypt::Rijndael的维护者。我没有编写原始代码,但是当其他人失败时,我尝试使其工作。

我收到了另一个类似RT #27632的报告。模块中的问题是应为unsigned int的signed int。 Crypt::Rijndael的最新版本1.07应该已修复。您正在使用哪个版本?

另外,其中一些问题取决于平台。如果查看发行版中的rijndael.h代码,您将看到我必须跳过的箍,以获取适用于各种平台的正确类型的大小。我认为您使用的是Windows(而不是Cygwin)。您正在使用哪个Windows版本?

如RT票据中所述,第一步是使用Crypt::Rijndael和C#实现,使用相同的初始化矢量对相同的消息进行加密。您应该获得相同的输出。如果您没有获得相同的crypttext,则有问题。

让我知道如何为您解决问题,以便在需要时将其作为Crypt::Rijndael错误进行跟踪。

谢谢,

07-24 21:22