我在VB.net轉換vb.net字節到PHP
Dim bytIV() As Byte = {121, 241, 10, 1, 132, 74, 11, 39, 255, 91, 45, 78, 14, 211, 22, 62}
我試圖將其轉換爲PHP下面的代碼。
$iv = array(121, 241, 10, 1, 132, 74, 11, 39, 255, 91, 45, 78, 14, 211, 22, 62);
這是行不通的。
完整的PHP代碼如下:
<?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代碼:
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
感謝您指出我的錯誤。由於我的錯誤,這個問題不再有效。 謝謝! – shaiss 2009-08-14 18:46:01