在c#中使用Triple DES进行加密,在Perl中解密



我试图使用triple des在c#中加密一串文本。最终需要使用Perl解密文本。另一端的文字看起来仍然像Gobblygyk。我是否错过了密码上的标志?

c#加密:

    public static string EncryptString(string str)
    {
        using (var provider = new TripleDESCryptoServiceProvider())
        {
            provider.Mode = CipherMode.CBC;
            provider.Key = Encoding.ASCII.GetBytes("THISIS24BYTESWORTHOFTEXT");
            provider.IV = Encoding.ASCII.GetBytes("01234567");
            provider.Padding = PaddingMode.PKCS7;
            var hashBytes = EncryptStringToBytes(str, provider);
            return Convert.ToBase64String(hashBytes);  
        }
    }
    private static byte[] EncryptStringToBytes(string txt, TripleDESCryptoServiceProvider desAlg)
    {
        var encryptor = desAlg.CreateEncryptor(desAlg.Key, desAlg.IV);
        using (var msEncrypt = new MemoryStream())
        {
            using (var csEncrypt = new CryptoStream(msEncrypt, encryptor, CryptoStreamMode.Write))
            {
                using (var swEncrypt = new StreamWriter(csEncrypt))
                {
                    swEncrypt.Write(txt);
                }
            }
            return msEncrypt.ToArray();
        }
    }
}

perl解密:

sub DecryptString { 
my ($dbh, $args) = @_;
my $inargs = $args->{INPUT};
my $key="THISIS24BYTESWORTHOFTEXT";
my $iv = "01234567";
my $cipher = Crypt::CBC->new(
        -cipher => 'DES_EDE3',
        -key => $key,
        -literal_key => 1,
        -iv => $iv,
        -add_header => 0,
        -keysize => 24,
);
return $cipher->decrypt($inargs);
}

在解密之前需要解码。根据下面的评论,我将电话更改为

$ inargs = decode_base64($ inargs(;

在致电解密之前。

最新更新