Как преобразовать код C # в Perl или OpenSSL Cli? - PullRequest
0 голосов
/ 01 января 2019

У меня есть код ac #, который преобразует строку в md5, а затем кодирует base64.Я хотел бы сделать то же самое с Perl-скриптом или Linux Cli, OpenSSL.Я попытался с помощью OpenSSL Cli, но я получаю другой результат из кода C #.Может кто-нибудь объяснить и показать мне, как преобразовать код C # в Linux Linux или Perl-скрипт?

Спасибо.

public class Program {
    public static void Main() {
        var myString = "7512";
        var o = CalculateMD5Hash(myString);
        Console.WriteLine("Generated String is: {0}", o);

    }

    public static string CalculateMD5Hash(string input) {
        HashAlgorithm ha = new MD5CryptoServiceProvider();
        string prefix = "MD5:";
        string password = "";
        UnicodeEncoding enc = new UnicodeEncoding();
        password = Convert.ToBase64String(ha.ComputeHash(enc.GetBytes(input)));   
        return prefix+password;
    }
}

# Linux openssl cli
echo -ne '7512' | openssl dgst -md5 -binary | openssl base64  

Когда я запускаю код c # со строкой: 7512, я получаю: cA5YjDeU2fOJwwnVFPCuAw ==

Но когда я использую команду openssl cli, я получаю: FhxcWtUfzIhBV4kFEbPIsA =1008 *

1 Ответ

0 голосов
/ 01 января 2019

Ну, получил ответ на сайте perlmonks.
https://perlmonks.org/index.pl?node_id=1227872

UnicodeEncoding кодирует в UTF-16LE.Таким образом, в Perl вам придется использовать модуль Encode для этого, а затем либо использовать md5_base64 из Digest :: MD5, который удаляет заполнение в конце строки (==), либо, если вы хотите заполнение,вам придется использовать MIME :: Base64 отдельно:

use warnings;
use strict;
use Encode qw/encode/;
use Digest::MD5 qw/md5/;
use MIME::Base64 qw/encode_base64/;

my $string = "7512";
my $md5b64 = encode_base64( md5( encode( 'UTF-16LE', $string,
    Encode::FB_CROAK|Encode::LEAVE_SRC ) ), "" );
print "Generated String is: MD5:$md5b64\n";

my $expect = "cA5YjDeU2fOJwwnVFPCuAw==";
print $md5b64 eq $expect ? "Matches!\n" : "Doesn't match!\n";

__END__
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...