PHP中的C#CryptoStream等效项

时间:2019-03-05 12:35:13

标签: c# php encryption

我有一个C#解密方法,并且正在尝试将其转换为等效的PHP。

这是C#中的方法:

public static string DecryptSHA256(string inputText, string key, string salt)
{
    string str2;
    byte[] buffer = Convert.FromBase64String(inputText);

    RijndaelManaged objA = new RijndaelManaged();
    objA.KeySize = 256;
    objA.BlockSize = 256;
    objA.Mode = CipherMode.CBC;
    objA.Padding = PaddingMode.PKCS7;
    objA.Key = Encoding.UTF8.GetBytes(key);
    objA.IV = Encoding.UTF8.GetBytes("XzYAsLyfjPTTsrLfXoCUtfdcmbGLpRLO");

    ICryptoTransform transform = objA.CreateDecryptor(new PasswordDeriveBytes(objA.Key, Encoding.UTF8.GetBytes(salt), "SHA256", 2).GetBytes(objA.KeySize / 8), objA.IV);

    MemoryStream stream = new MemoryStream(buffer);
    CryptoStream stream2 = new CryptoStream(stream, transform, CryptoStreamMode.Read);
    byte[] buffer3 = new byte[buffer.Length];
    stream2.Read(buffer3, 0, buffer3.Length);
    str2 = Encoding.UTF8.GetString(buffer3).Replace("\0", "");
    return str2;
}

这是C#中的方法调用:

string dc = DecryptSHA256("MzDF/4K2ueGDx3N9VXrPZZu2MnBIROn3XbllraO+KEA=", "eaf71972af77802e47b6d7a5f91330b6", "NCPPROJECT");

谁将其转换为PHP? 这是到目前为止我得到的:

$input = 'MzDF/4K2ueGDx3N9VXrPZZu2MnBIROn3XbllraO+KEA=';
$key = 'eaf71972af77802e47b6d7a5f91330b6';
$salt = 'NCPPROJECT';
$iv = 'XzYAsLyfjPTTsrLfXoCUtfdcmbGLpRLO';

function password_derive_bytes($key, $salt, $algo, $iterations, $length) {
    $h = $key . $salt;

    for ($i = 1; $i <= $iterations; $i++) { 
        $h = hash($algo, $h, true);
    } 

    $a = unpack('c*', $h);

    return array_slice($a, 0, $length);
}

echo '<strong>PASSWORD DERIVE BYTES:</strong><br />';
$pdb = password_derive_bytes($key, $salt, "sha256", 2, 32);

for ($c = 0; $c < count($pdb); $c++) {
    $pdb[$c] = ($pdb[$c] < 0 ? 256 - ($pdb[$c] * -1) : $pdb[$c]);
    echo '    [' . $c . ']: ' . $pdb[$c] . '<br />';
}

$pdbs = implode(array_map("chr", $pdb));
$pdbs = base64_encode($pdbs);
echo 'PDBS: ' . $pdbs . '<br />';

那很好,但是我如何转换这部分:

MemoryStream stream = new MemoryStream(buffer);
CryptoStream stream2 = new CryptoStream(stream, transform, CryptoStreamMode.Read);
byte[] buffer3 = new byte[buffer.Length];
stream2.Read(buffer3, 0, buffer3.Length);
str2 = Encoding.UTF8.GetString(buffer3).Replace("\0", "");
return str2;

转换成PHP等效项?

0 个答案:

没有答案