2009-08-26 12 views
2

J'ai une situation très stupide, je reçois une chaîne cryptée à partir de VB.NET en PHP. Je suis capable de déchiffrer la clé. Mais quand je veux crypter le résultat et obtenir la chaîne encrtypted je reçois une discordance. Quelqu'un peut-il m'aider s'il vous plaît ....Crypter en PHP ne fonctionne pas comme prévu

Ci-dessous le code PHP.

<?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

Le code de chiffrement réel vb serait utile. – VolkerK

+0

J'ai inclus la question VB.NET est la section Réponses ci-dessous –

Répondre

1

Utilisez-vous le même iv pour VB, ainsi que le cryptage PHP? En outre, essayez d'enlever la garniture après le cryptage - ce n'est pas nécessaire. Vous devez couper seulement après le décryptage.

0

Le code VB.NET j'utilise sur le côté appliation est inférieure à ...

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 
Questions connexes