Репликация шифрования .Net в PHP - PullRequest
0 голосов
/ 31 августа 2011

Я пытаюсь повторить метод шифрования, который уже существует для части приложения, которое было написано в VB.Net, в PHP.Полученные зашифрованные значения должны быть одинаковыми.У меня нет большого опыта в шифровании, и, несмотря на все мои усилия по поиску информации в Интернете, мои зашифрованные значения не совпадают.Может кто-нибудь сообщить мне, где я ошибаюсь в своем коде PHP?

Вот процесс .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));
}
?>

Ответы [ 2 ]

1 голос
/ 31 августа 2011

Выглядит как опечатка

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

try $ keyArray = array (42, 16, 93, 156, 78, 4, 218, 32);

0 голосов
/ 31 августа 2011

У меня были похожие проблемы с получением зашифрованных данных RSA из .Net для расшифровки в PHP.Обычно это сводится к проблеме набора символов.Если возможно, убедитесь, что обе системы обрабатывают строковые значения как строки UTF-8.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...