문제

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 's의 관리자입니다 crypt :: Rijndael. 나는 원래 코드를 쓰지 않았지만 다른 사람들에게 실패 할 때 작동하도록 노력합니다.

이와 같은 다른 보고서를 받았습니다 RT #27632. 모듈의 문제는 서명되지 않은 int였습니다. 최신 버전 crypt :: Rijndael, 1.07, 수정이 있어야합니다. 어떤 버전을 사용하고 있습니까?

또한 이러한 문제 중 일부는 플랫폼 의존적입니다. 분포에서 Rijndael.h 코드를 살펴보면 다양한 플랫폼에 적합한 유형 크기를 얻으려면 이동 해야하는 후프가 표시됩니다. 나는 당신이 창문에 있지만 (Cygwin은 아님)라고 생각합니다. 어떤 버전의 Windows를 사용하고 있습니까?

RT 티켓에 언급 된 바와 같이, 첫 번째 단계는 두 가지를 사용하여 동일한 초기화 벡터로 동일한 메시지를 암호화하는 것입니다. crypt :: Rijndael 그리고 c# 구현. 동일한 출력을 가져와야합니다. 동일한 crypttext를 얻지 못하면 문제가 있습니다.

이것이 당신을 위해 어떻게 작동하는지 알려주세요. crypt :: Rijndael 필요한 경우 버그.

감사,

다른 팁

나는 당신이 이것을 Windows에서 실행한다고 가정합니다. 이진 데이터를 다루고 있으므로이를 고려해야합니다. Perl에서는 사용해야합니다 쌍 모드. C#에서 BinaryReader를 사용해야한다고 생각합니다 (그러나 C# 프로그래머는 아니므로 확실하지 않습니다).

동일한 IV 크기가 있습니까? IV 크기가 PERL에서 C# 암호화 변환에 대한 PERL과 비슷한 문제가 있었기 때문에 요청합니다.

Keysize는 256 (비트)이지만 Perl 코드에있는 키는 3 바이트, 12 비트입니다.

간단한 문자열을 암호화 / 해독 해 보셨습니까? 이를 통해 암호화에 무언가가 있는지 확인할 수 있습니다 (파일을 읽는 것이 아니라).

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top