2011-08-31 50 views
0

我正在尝试复制在PHP中用VB.Net编写的应用程序的一部分已经存在的加密方法。得到的加密值必须相同。我没有太多的加密经验,尽管我努力在网上搜索我的加密值不匹配的信息。有人能让我知道我的PHP代码中哪里出错吗?在PHP中复制.Net加密

这是.Net过程。不幸的是,这种方法目前无法更改。

Public Class Encrypt 


'8 bytes randomly selected for both the Key and the Initialization Vector 
'the IV is used to encrypt the first block of text so that any repetitive 
'patterns are not apparent 
Private Shared KEY_64() As Byte = {42, 16, 93, 156, 78, 4, 218, 32} 
Private Shared IV_64() As Byte = {55, 103, 246, 79, 36, 99, 167, 3} 

Public Function EncryptPwd(ByVal value As String) As String 
    Try 


     Dim cryptoProvider As DESCryptoServiceProvider = _ 
       New DESCryptoServiceProvider() 
     Dim ms As MemoryStream = New MemoryStream() 
     Dim cs As CryptoStream = _ 
      New CryptoStream(ms, cryptoProvider.CreateEncryptor(KEY_64, IV_64), _ 
       CryptoStreamMode.Write) 
     Dim sw As StreamWriter = New StreamWriter(cs) 

     sw.Write(value) 
     sw.Flush() 
     cs.FlushFinalBlock() 
     ms.Flush() 

     'convert back to a string 
     Return Convert.ToBase64String(ms.GetBuffer(), 0, CInt(ms.Length)) 
    Finally 

    End Try 
End Function 
End Class 

这是我的PHP。

<?php 

function addpadding($string, $blocksize = 8) 
{ 
    $len = strlen($string); 
    $pad = $blocksize - ($len % $blocksize); 
    $string .= str_repeat(chr($pad), $pad); 
    return $string; 
} 
    ?> 
<form id="form1" name="form1" method="post" action=""> 
    enter text 
    <input name="data" type="text" /> 
    <input type="hidden" value="op" name="op" /> 
    <input type="submit" name="Submit" value="Submit" /> 
</form> 
    <?php 

if(!isset($_POST['op'])) { 

}else { 
    $buffer = $_POST['data']; 

    $keyArray=array(42, 16, 93, 18, 156, 78, 4, 32); 
    $key=null; 
    foreach ($keyArray as $element) 
     $key.=CHR($element); 
    $ivArray=array(55, 103, 246, 79, 36, 99, 167, 3); 
    $iv=null; 
    foreach ($ivArray as $element) 
     $iv.=CHR($element); 

    echo "Key: " .$key. "<br>"; 
    echo "IV: " .$iv. "<br>"; 
    echo "Result: " .base64_encode(mcrypt_cbc(MCRYPT_DES, $key, addpadding($buffer), MCRYPT_ENCRYPT, $iv)); 
} 
?> 

回答

1

看起来像一个错字

Private Shared KEY_64() As Byte = {42, 16, 93, 156, 78, 4, 218, 32} 
$keyArray=array(42, 16, 93, 18, 156, 78, 4, 32); 

尝试 $ keyArray =阵列(42,16,93,156,78,4,218,32);

+0

谢谢,我做了这个改变,果然它的工作原理。 – Jason

0

我有类似的问题,从.Net RSA加密数据在PHP解密。通常它归结为一个字符集问题。如果可能,请确保两个系统都将字符串值处理为UTF-8字符串。