Avatar billede bierchen Nybegynder
04. januar 2009 - 15:36 Der er 1 kommentar og
1 løsning

Oversættelse af Perl kode

Hej Eksperter

Jeg er igang med at lave en lille Radius server, men har nogle problemer med at kryptere og dekryptere user-password attributen i en Radius pakke. Jeg har følgende stump kode fra Radius serveren radiator som viser hvordan de gør det. Så hvis der var nogle som kunne hjælpe med at oversætte det til VB.NET eller C#, da jeg ikke forstår Perl.

Er der nogen der kan hjælpe ?

Mvh. Bjørn


sub encrypt
{
    my ($plaintext, $secret) = @_;

    my $salt = pack('n', &Radius::Util::rand(65535)); # 2 bytes of salt
    my $hash = Digest::MD5::md5($salt . $secret);
    # Replicate the hash until its longer than the plaintext.
    my $hashrep = $hash x int((length($plaintext) + 16) / 16);
    my $encoded = MIME::Base64::encode_base64($salt . ($plaintext ^ $hashrep), '');
    chomp $encoded; # Strip off trailing newline
    return $encoded;
}

#####################################################################
# Decode the Base64 ciphertext according to the secret key
# Returns the plaintext
sub decrypt
{
    my ($cipher, $secret) = @_;

    my ($salt, $xor) = unpack('a2 a*', MIME::Base64::decode_base64($cipher));
    my $hash = Digest::MD5::md5($salt . $secret);
    # Replicate the hash until its same length as the xored cipher
    # which should be a multiple of 16 bytes
    my $hashrep = $hash x int((length($xor) + 15) / 16);
    my $plaintext = $xor ^ $hashrep;
    # Strip off any NUL padding
    $plaintext =~ s/\000*$//;
    return $plaintext;
}
Avatar billede bierchen Nybegynder
04. januar 2009 - 20:30 #1
Jeg har læst her: http://tools.ietf.org/html/draft-byerly-sip-radius-00

At det skal gøres sådan:    User-Password = md5hash(NAS-secret, nonce) XOR user-password

Jeg har prøvet at strikke denne kode sammen, men det virker ikke for mig, er der nogen som kan se hvor fejlen ligger ?


    Function decrypt2(ByVal encryptedPass As Byte(), ByVal SharedSecret As String, ByVal Ra As Byte()) As String


        Dim sharedSecretAsBytes As Byte()
        sharedSecretAsBytes = Encoding.UTF8.GetBytes(SharedSecret)

        Dim arrConcatBytes(SharedSecretAsBytes.Length + encryptedPass.Length - 1) As Byte

        Array.Copy(SharedSecretAsBytes, arrConcatBytes, SharedSecretAsBytes.Length)
        Array.Copy(Ra, 0, arrConcatBytes, sharedSecretAsBytes.Length, encryptedPass.Length)

        Dim arrMD5Hash As Byte()
        Dim Md5Hash As New MD5CryptoServiceProvider
        arrMD5Hash = Md5Hash.ComputeHash(arrConcatBytes)

        Dim UnencryptedPass(15) As Byte
        For i As Integer = 0 To 15
            UnencryptedPass(i) = arrMD5Hash(i) Xor encryptedPass(i)
        Next


        Dim Utf8plainText As String = Encoding.UTF8.GetString(UnencryptedPass)
        Dim ASCIIplainText As String = Encoding.ASCII.GetString(UnencryptedPass)

        Return ASCIIplainText
    End Function
Avatar billede bierchen Nybegynder
09. januar 2009 - 00:41 #2
Lukket
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester