我有一个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等效项?