Php için vb.net bayt dönüştürmek

2 Cevap php

Ben VB.net aşağıdaki kodu var

Dim bytIV() As Byte = {121, 241, 10, 1, 132, 74, 11, 39, 255, 91, 45, 78, 14, 211, 22, 62}

Ben php dönüştürmek çalışıyorum.

$iv = array(121, 241, 10, 1, 132, 74, 11, 39, 255, 91, 45, 78, 14, 211, 22, 62);

Bu işe yaramazsa.

Aşağıda tam php kodu:

    <?php
    $key = "lvvxmzmfrqeephxwmifwvyyllivhzbdi";
    $input = "this is a secret keythis is a secret keythis is a secret keythis is a secret key";

    $td = mcrypt_module_open('rijndael-128', '', 'ofb', '');
    //$iv = mcrypt_create_iv (mcrypt_enc_get_iv_size($td), MCRYPT_RAND);
    $iv = array(121, 241, 10, 1, 132, 74, 11, 39, 255, 91, 45, 78, 14, 211, 22, 62);
    mcrypt_generic_init($td, $key, $iv);
    $encrypted_data = mcrypt_generic($td, $input);
    mcrypt_generic_deinit($td);
    mcrypt_module_close($td);

    echo "IV: $iv <br><br>";

    echo  base64_encode($encrypted_data);
?>

VB.net kodu:

Public Function DecryptString128Bit(ByVal vstrStringToBeDecrypted As String, _
                                    ByVal vstrDecryptionKey As String) As String

    Dim bytDataToBeDecrypted() As Byte
    Dim bytTemp() As Byte
    Dim bytIV() As Byte = {121, 241, 10, 1, 132, 74, 11, 39, 255, 91, 45, 78, 14, 211, 22, 62}
    Dim objRijndaelManaged As New RijndaelManaged()
    Dim objMemoryStream As MemoryStream
    Dim objCryptoStream As CryptoStream
    Dim bytDecryptionKey() As Byte

    Dim intLength As Integer
    Dim intRemaining As Integer
    Dim intCtr As Integer
    Dim strReturnString As String = String.Empty
    Dim achrCharacterArray() As Char
    Dim intIndex As Integer

    '   *****************************************************************
    '   ******   Convert base64 encrypted value to byte array      ******
    '   *****************************************************************

    bytDataToBeDecrypted = Convert.FromBase64String(vstrStringToBeDecrypted)

    '   ********************************************************************
    '   ******   Encryption Key must be 256 bits long (32 bytes)      ******
    '   ******   If it is longer than 32 bytes it will be truncated.  ******
    '   ******   If it is shorter than 32 bytes it will be padded     ******
    '   ******   with upper-case Xs.                                  ****** 
    '   ********************************************************************

    intLength = Len(vstrDecryptionKey)

    If intLength >= 32 Then
        vstrDecryptionKey = Strings.Left(vstrDecryptionKey, 32)
    Else
        intLength = Len(vstrDecryptionKey)
        intRemaining = 32 - intLength
        vstrDecryptionKey = vstrDecryptionKey & Strings.StrDup(intRemaining, "X")
    End If

    bytDecryptionKey = Encoding.ASCII.GetBytes(vstrDecryptionKey.ToCharArray)

    ReDim bytTemp(bytDataToBeDecrypted.Length)

    objMemoryStream = New MemoryStream(bytDataToBeDecrypted)

    '   ***********************************************************************
    '   ******  Create the decryptor and write value to it after it is   ******
    '   ******  converted into a byte array                              ******
    '   ***********************************************************************

    Try

        objCryptoStream = New CryptoStream(objMemoryStream, _
           objRijndaelManaged.CreateDecryptor(bytDecryptionKey, bytIV), _
           CryptoStreamMode.Read)

        objCryptoStream.Read(bytTemp, 0, bytTemp.Length)

        objCryptoStream.FlushFinalBlock()
        objMemoryStream.Close()
        objCryptoStream.Close()

    Catch

    End Try

    '   *****************************************
    '   ******   Return decypted value     ******
    '   *****************************************

    Return StripNullCharacters(Encoding.ASCII.GetString(bytTemp))

End Function


Public Function StripNullCharacters(ByVal vstrStringWithNulls As String) As String

    Dim intPosition As Integer
    Dim strStringWithOutNulls As String

    intPosition = 1
    strStringWithOutNulls = vstrStringWithNulls

    Do While intPosition > 0
        intPosition = InStr(intPosition, vstrStringWithNulls, vbNullChar)

        If intPosition > 0 Then
            strStringWithOutNulls = Left$(strStringWithOutNulls, intPosition - 1) & _
                              Right$(strStringWithOutNulls, Len(strStringWithOutNulls) - intPosition)
        End If

        If intPosition > strStringWithOutNulls.Length Then
            Exit Do
        End If
    Loop

    Return strStringWithOutNulls

End Function

2 Cevap

Dizesi "Array" döküm olacak - PHP IV bir dize değil, bir dizi olmasını bekler.

Ben dize sadece ikili veri ve pack() function neye ihtiyacınız olabilir olduğunu tahmin ediyorum. Bu parametre olarak bir dizi kabul etmez, ancak yorumların her biri dizi elemanının dolu değerlerini birleştirmek için dizi boyunca bir döngü kullanır.

Aslında çalışmıyor demek hattı çalışıyor. Ben PHP ön sürüm 3 kullanılan hiç, ama o zaman en azından bu yana çalıştı.

Sorun $ iv parametre mcrypt_generic_init bir dize değil ints bir dizi olması gerekiyordu olmasıdır.

Bu dönüşüm için çalışması gerekir:

$iv_string = "";
foreach ($iv as $char)
    $iv_string .= chr($char);

Üzgünüm, benim PHP paslı :)