当前位置:  开发笔记 > 编程语言 > 正文

为什么C#不能解密Perl的Crypt :: Rijndael的输出?

如何解决《为什么C#不能解密Perl的Crypt::Rijndael的输出?》经验,为你挑选了1个好方法。

文件已由Perl加密.初始解密尝试失败,我现在正试图确定是否有任何hoojoo正在进行(需要一些其他设置)

达夫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 Code应该如何阅读

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

brian d foy.. 11

我是Perl的Crypt :: Rijndael的维护者.我没有写原始代码,但是当它为其他人失败时,我试着让它工作.

我收到了另一份报告,如RT#27632.模块中的问题是一个签名的int,应该是unsigned int.最新版本的Crypt :: Rijndael,1.07应该有修复.你使用的是哪个版本?

此外,其中一些问题与平台有关.如果你查看发行版中的rijndael.h代码,你会看到我必须跳过的箍,以便为各种平台获得正确的类型大小.我认为你在Windows上(但不是Cygwin).您使用的是哪个版本的Windows?

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

让我知道这对你有什么用,所以我可以跟踪它作为Crypt :: Rijndael bug,如果我需要的话.

谢谢,



1> brian d foy..:

我是Perl的Crypt :: Rijndael的维护者.我没有写原始代码,但是当它为其他人失败时,我试着让它工作.

我收到了另一份报告,如RT#27632.模块中的问题是一个签名的int,应该是unsigned int.最新版本的Crypt :: Rijndael,1.07应该有修复.你使用的是哪个版本?

此外,其中一些问题与平台有关.如果你查看发行版中的rijndael.h代码,你会看到我必须跳过的箍,以便为各种平台获得正确的类型大小.我认为你在Windows上(但不是Cygwin).您使用的是哪个版本的Windows?

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

让我知道这对你有什么用,所以我可以跟踪它作为Crypt :: Rijndael bug,如果我需要的话.

谢谢,

推荐阅读
赛亚兔备_393
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有