2009-08-26 13 views
2

Ich habe eine sehr dumme Situation, ich erhalte eine verschlüsselte Zeichenfolge von VB.NET in PHP. Ich kann den Schlüssel entschlüsseln. Aber wenn ich das Ergebnis verschlüsseln will und die eingeklemmte Zeichenfolge bekomme, bekomme ich eine Diskrepanz. Kann mir jemand bitte helfen ....Verschlüsseln in PHP funktioniert nicht wie erwartet

Unten ist der PHP CODE.

<?php 

//$syscode=$_REQUEST['syscode']; 
//The actual string is "blueberry" which is encrypted in VB.NET and sent to PHP 
$syscode = "8yN73RDmMFuXo9ux8QKC6w=="; //This is the encrypted string as received from VB.NET 
echo "Original Encrypted String Received from VB.NET: <br>".$syscode; 
echo "<br><br>"; 
Decrypt($syscode); 
echo "<br><br>"; 
Encrypt("blueberry"); 


function Decrypt($strToDecrypt){ 
global $strD; 
$key64 = "cPSQAC05GBXzMhRRz7tm8cqg+vHdHyN5"; 
$iv64 = "jIShBJVBfXo="; 
$encryptedString64 = $strToDecrypt; 
$keybytes = base64_decode($key64); 
$ivbytes = base64_decode($iv64); 

$encryptedStringbytes = base64_decode($encryptedString64); 

// use mcrypt library for encryption 
$decryptRaw = mcrypt_decrypt(MCRYPT_3DES, $keybytes, $encryptedStringbytes, MCRYPT_MODE_CBC, $ivbytes); 
$decryptString=trim($decryptRaw,"\x00..\x1F"); 
print "Decrypted by PHP:<br>$decryptString<br/>"; //The decrypted string should be "blueberry" 
} 

function Encrypt($strToEncrypt){ 
$key64 = "cPSQAC05GBXzMhRRz7tm8cqg+vHdHyN5"; 
$iv64 = "jIShBJVBfXo="; 
$keybytes = base64_decode($key64); 
$ivbytes = base64_decode($iv64); 

// use mcrypt library for encryption 
$encryptRaw = mcrypt_encrypt(MCRYPT_3DES, $keybytes, $strToEncrypt, MCRYPT_MODE_CBC, $ivbytes); 
$encryptString=trim($encryptRaw,"\x00..\x1F"); 
$encryptString=(base64_encode(trim($encryptRaw))); 

print "Encrypted in PHP:<br>$encryptString<br/>"; //This where the PHP encrypted result is not matching the VB.NET encryption result. 
} 
?> 
+1

Der Verschlüsselungscode tatsächlich vb wäre hilfreich. – VolkerK

+0

Ich habe die VB.NET Frage enthalten ist der Abschnitt Antworten unten –

Antwort

1

Verwenden Sie die gleiche iv für VB sowie PHP-Verschlüsselung? Versuchen Sie auch, die Trimmung nach der Verschlüsselung zu entfernen - sie wird nicht benötigt. Sie müssen nur nach der Entschlüsselung trimmen.

0

Der Code VB.NET i auf der appliation Seite bin mit unten ist ...

Imports System 
Imports System.Text 
Imports System.Security.Cryptography 
Imports System.IO 

Module Crypto 
    Public Function Decrypt(ByVal strToDecrypt As String) As String 
     Try 

      'initialize our key 
      Dim tripleDESKey As SymmetricAlgorithm = SymmetricAlgorithm.Create("TripleDES") 
      tripleDESKey.Key = Convert.FromBase64String("cPSQAC05GBXzMhRRz7tm8cqg+vHdHyN5") 
      tripleDESKey.IV = Convert.FromBase64String("jIShBJVBfXo=") 

      'load our encrypted value into a memory stream 
      Dim encryptedValue As String = strToDecrypt 
      Dim encryptedStream As MemoryStream = New MemoryStream() 
      encryptedStream.Write(Convert.FromBase64String(encryptedValue), 0, Convert.FromBase64String(encryptedValue).Length) 
      encryptedStream.Position = 0 

      'set up a stream to do the decryption 
      Dim cs As CryptoStream = New CryptoStream(encryptedStream, tripleDESKey.CreateDecryptor, CryptoStreamMode.Read) 
      Dim decryptedStream As MemoryStream = New MemoryStream() 
      Dim buf() As Byte = New Byte(2048) {} 
      Dim bytesRead As Integer 

      'keep reading from encrypted stream via the crypto stream 
      'and store that in the decrypted stream 
      bytesRead = cs.Read(buf, 0, buf.Length) 
      While (bytesRead > 0) 
       decryptedStream.Write(buf, 0, bytesRead) 
       bytesRead = cs.Read(buf, 0, buf.Length) 
      End While 

      'reassemble the decrypted stream into a string  
      Dim decryptedValue As String = Encoding.ASCII.GetString(decryptedStream.ToArray()) 


      Return (decryptedValue.ToString()) 

     Catch ex As Exception 
      MsgBox(ex.Message) 
     End Try 
    End Function 

    Public Function Encrypt(ByVal strToEncrypt As String) As String 
     Dim sa As SymmetricAlgorithm = SymmetricAlgorithm.Create("TripleDES") 
     sa.Key = Convert.FromBase64String("cPSQAC05GBXzMhRRz7tm8cqg+vHdHyN5") 
     sa.IV = Convert.FromBase64String("jIShBJVBfXo=") 

     Dim inputByteArray() As Byte = Encoding.ASCII.GetBytes(strToEncrypt) 
     Dim mS As MemoryStream = New MemoryStream() 

     Dim trans As ICryptoTransform = sa.CreateEncryptor 
     Dim buf() As Byte = New Byte(2048) {} 
     Dim cs As CryptoStream = New CryptoStream(mS, trans, CryptoStreamMode.Write) 
     cs.Write(inputByteArray, 0, inputByteArray.Length) 
     cs.FlushFinalBlock() 

     Return Convert.ToBase64String(mS.ToArray).ToString 
    End Function 
End Module 
Verwandte Themen