NET和PHP中的AES256加密

NET和PHP中的AES256加密,php,.net,encryption,aes,Php,.net,Encryption,Aes,我必须使用现有.NET应用程序中的相同密钥和iv在PHP中实现aes256加密,以加密相同的密码(相同的密文)。我必须使用与.NET应用程序相同的IV(16字节)和键(32字节)。我的问题是,我不明白如何将.NET应用程序中的key和IV转换为php字符串(php mycrypt_encrypt函数,我想用于php aes加密,它需要IV和key作为字符串参数),因为php没有字节数组。例如,IV和键在.NET数组之后 byte[] iv = {128,44,74,135,31,23,0,133

我必须使用现有.NET应用程序中的相同密钥和iv在PHP中实现aes256加密,以加密相同的密码(相同的密文)。我必须使用与.NET应用程序相同的IV(16字节)和键(32字节)。我的问题是,我不明白如何将.NET应用程序中的key和IV转换为php字符串(php mycrypt_encrypt函数,我想用于php aes加密,它需要IV和key作为字符串参数),因为php没有字节数组。例如,IV和键在.NET数组之后

byte[] iv = {128,44,74,135,31,23,0,133,22,13,118,17,187,113,33,111};
byte[] key = {100,123,214,125,109,19,10,229,118,31,44,157,36,10,0,103,15,16,101,126,0,122,122,86,119,29,140,213,27,129,119,50};
现在我想使用这些密钥和iv在PHP中加密一个带有

mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $key, $paddedPlainText, MCRYPT_MODE_CBC, $iv).
如何将字节数组从.NET转换为字符串,以便在PHP mcrypt_encrypt函数中使用它们

我为.NET字节数组尝试了base64编码(Convert.ToBase64String(key),Convert.ToBase64String(iv))。我已经编写了以下PHP:

function pkcs7pad($plaintext, $blocksize = 16)
{
    $padsize = $blocksize - (strlen($plaintext) % $blocksize);
    return $plaintext . str_repeat(chr($padsize), $padsize);
}

public function testPW()
{
    $key = base64_decode('[HERE IS MY KEY base64 encoded]');
    $iv = base64_decode('[HERE IS MY IV base64 encoded]');

    $plaintext = 'test1234';

    $ciphertext = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $key, $this->pkcs7pad($plaintext), MCRYPT_MODE_CBC, $iv);

    return base64_encode($ciphertext);
}

但是testPW返回的密码与.NET应用程序的密码不同。返回的密码的长度也小于.NET密码

您永远不应该加密用户的密码。您需要使用散列,而一些强散列是PBKDF2、bcrypt和scrypt。由于散列函数是单向函数,因此无法“解密”散列。为了对用户进行身份验证,您可以再次通过哈希函数运行密码,以便与存储在数据库中的哈希进行比较。看更多:是的,你是对的。但我必须使用与.NET应用程序中相同的机制,这是一项要求。所以我不能改变这一点。我建议您将key和IV编码成一些常见的格式,比如Hex或Base64,然后用PHP对其进行解码。有很多解决方案。此外,请注意,默认情况下,mcrypt使用零填充。我建议你用这个。