【发布时间】:2019-10-25 15:59:18
【问题描述】:
我需要用 PHP 语言准确转换这个 .NET 函数,有什么帮助吗?
我尝试了 StackOverflow 上的不同解决方案,但似乎没有一个适合我。
internal string Encrypt(string plaintext, string password)
{
RijndaelManaged rijndaelCipher = new RijndaelManaged();
byte[] plaintextByte = System.Text.Encoding.Unicode.GetBytes(plaintext);
byte[] saltByte = Encoding.ASCII.GetBytes(password.Length.ToString());
PasswordDeriveBytes secretKey = new PasswordDeriveBytes(password, saltByte);
ICryptoTransform encryptor = rijndaelCipher.CreateEncryptor(secretKey.GetBytes(32), secretKey.GetBytes(16));
MemoryStream memoryStream = new MemoryStream();
CryptoStream cryptoStream = new CryptoStream(memoryStream, encryptor, CryptoStreamMode.Write);
cryptoStream.Write(plaintextByte, 0, plaintextByte.Length);
cryptoStream.FlushFinalBlock();
byte[] cipherBytes = memoryStream.ToArray();
memoryStream.Close();
cryptoStream.Close();
encryptor.Dispose();
return Convert.ToBase64String(cipherBytes);
}
谢谢!
编辑:
这是我尝试过的代码之一:
class Crypt
{
private $key,$iv_size,$iv;
/**
* constructor
* @param $key (string:'TheKey')
* @return void
*/
function __construct($key='TheKey'){
$this->key = trim($key);
$this->iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB);
$this->iv = mcrypt_create_iv($this->iv_size, MCRYPT_RAND);
}
public function encrypt($string){
$string=trim($string);
return base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $this->key, $string, MCRYPT_MODE_ECB, $this->iv));
}
}
【问题讨论】:
-
请分享您在 PHP 中尝试过的代码,谢谢
-
我们怎么知道你尝试了什么,“but no-one似乎对我有用”是什么意思,你肯定能看出这个问题
-
Rijndael 也称为 AES。你确定 PHP 中还没有 AES 加密库吗?
-
@SteveTodd 我猜主要问题是
PasswordDeriveBytes的使用。因此,我们还需要 PHP 中的 PBKDF1 功能,并为其提供 PasswordDeriveBytes 内部使用的任何值(尤其是迭代)。
标签: c# php encryption rijndael