Nasıl aşağıdaki şifreleme kod VB.NET Perl (veya PHP) gelen dönüştürebilirim?

0 Cevap php

Perl (PHP aynı zamanda bir kod parçacığı) yazılmış olan bazı şifreleme kodu var - ama sadece üçüncü parti ile çalışmak için VB.NET ile yazılmış bir sürümü alınamıyor.

Example in Perl

    package Sitemaker::API::Crypt;

    use warnings;
    use strict;
    use base qw( Exporter );

    use Crypt::CBC;
    use MIME::Base64;

    our @EXPORT = qw(
        encrypt
        decrypt
    );

    =head2 encrypt( $key, $iv, $arg1[,$arg2][,...]  )

    This encrypts the argumenst (which must all be values, not references) with
    the key (which must be 16 characters long)

    =cut
    sub encrypt {
        my ( $key, $iv, @args ) = @_;
        my $args =  join( '|', @args );

        my $cipher = Crypt::CBC->new(
            -cipher => 'Rijndael',
            -blocksize => 16,
            -keysize => 16,
            -header => 'none',
            -padding => 'standard',
            -iv => $iv,
            -literal_key => 1,
            -key => $key,
        );

        my $binary_token = $cipher->encrypt( $args );

        return encode_base64( $iv . $binary_token );
    }
1;

Example in PHP

/**
 * @param string $plaintext
 * @return string encrypted token
 *
 * Relies on the Mcrypt module
 */
 function encrypt( $plaintext, $apiKey)
 {
    // Initialize mcrypt module (AES, 128-bit key, CBC)
    $handle = mcrypt_module_open( MCRYPT_RIJNDAEL_128, '', MCRYPT_MODE_CBC, '');
    $iv = mcrypt_create_iv( mcrypt_enc_get_iv_size( $handle ), MCRYPT_DEV_URANDOM );

    // PKCS#5 padding
    $blocksize = mcrypt_enc_get_block_size( $handle );
    $padsize = $blocksize - ( strlen( $plaintext ) % $blocksize );
    $plaintext .= str_repeat( chr( $padsize ), $padsize );

    // encrypt
    mcrypt_generic_init( $handle, $apiKey, $iv );
    $ciphertext = mcrypt_generic( $handle, $plaintext );

    // clean up
    mcrypt_generic_deinit( $handle );
    mcrypt_module_close( $handle );

    return base64_encode( $iv. $ciphertext );
}

Yani VB.NET de aynı yeniden çalıştı, ama ben servise göndermek gibi, işe yarıyor ve sadece hataları geri alamadım. VB.NET ile şifreleme yöntemi ...

 Public Function EncrpytIt(ByVal Key As String, ByVal IV As String, ByVal arrParams As String()) As String
        Dim plainTextBytes As Byte()
        plainTextBytes = Encoding.ASCII.GetBytes(Join(arrParams, "~"))

        Dim outputBytes As Byte()

        Dim symmetricKey As New System.Security.Cryptography.RijndaelManaged()
        With symmetricKey
            .Key = Encoding.ASCII.GetBytes(Key)
            .IV = Encoding.ASCII.GetBytes(IV)
            .Mode = CipherMode.CBC
            .BlockSize = 128 
            .KeySize = 128 
            .Padding = PaddingMode.PKCS7
        End With
        Dim encryptor As ICryptoTransform = symmetricKey.CreateEncryptor(symmetricKey.Key, symmetricKey.IV)
        Using msEncrypt As New MemoryStream()
            Using csEncrypt As New CryptoStream(msEncrypt, encryptor, CryptoStreamMode.Write)
                csEncrypt.Write(plainTextBytes, 0, plainTextBytes.Length)
                csEncrypt.FlushFinalBlock()
            End Using
            outputBytes = msEncrypt.ToArray
        End Using
        Return IV & Convert.ToBase64String(outputBytes)
    End Function

Aynı şekilde davranmak, ya da ben vb.net kod ayarlarını değiştirmek zorunda mı?

0 Cevap