我正在做一个项目,我有一个 C# 应用程序,它有一个加密类,可以执行字符串值的加密和解密。我现在想使用 PHP 制作一个 Web 界面来与我的 C# 应用程序一起工作。
我正在尝试执行与我的 C# 项目在我的 PHP 网站中执行的相同类型的加密,但我无法弄清楚我需要做什么。
下面是我的 C# 应用程序的代码。
public static string encrypt(string encryptionString)
{
byte[] clearTextBytes = Encoding.UTF8.GetBytes(encryptionString);
SymmetricAlgorithm rijn = SymmetricAlgorithm.Create();
MemoryStream ms = new MemoryStream();
byte[] rgbIV = Encoding.ASCII.GetBytes("PRIVATE");
byte[] key = Encoding.ASCII.GetBytes("PRIVATE");
CryptoStream cs = new CryptoStream(ms, rijn.CreateEncryptor(key, rgbIV), CryptoStreamMode.Write);
cs.Write(clearTextBytes, 0, clearTextBytes.Length);
cs.Close();
return Convert.ToBase64String(ms.ToArray());
}
我正在我的 PHP Web 界面中尝试以下代码
define("CIPHERKEY", "PRIVATE");
function encrypt($data)
{
//$cipher = mcrypt_module_open(MCRYPT_RIJNDAEL_256, '', MCRYPT_MODE_ECB, '');
$cipher = mcrypt_module_open(MCRYPT_RIJNDAEL_128, '', MCRYPT_MODE_ECB, '');
//$iv = mcrypt_create_iv(mcrypt_enc_get_iv_size($cipher), MCRYPT_RAND);
$iv = 'PRIVATE';
//$key = substr(CIPHERKEY, 0, mcrypt_enc_get_key_size($cipher));
$key =CIPHERKEY;
if (mcrypt_generic_init($cipher, $key, $iv) != 1)
{
$cipherData = mcrypt_generic($cipher, $data);
mcrypt_generic_deinit($cipher);
mcrypt_module_close($cipher);
$sanitizedCipherData = trim(base64_encode($cipherData));
return $sanitizedCipherData;
}
}
我尝试了各种变体,但找不到正确的方法。
iv 变量使用与 C# 应用程序中的 rgbIV 变量相同的密钥,PHP Web 界面中的 CIPHERKEY 使用与我的 c# 应用程序中的密钥变量相同的密钥。
感谢您的任何帮助,您可以提供
更新
目前我不断得到不同的结果。我通过传入字符串来测试它password
。
在上面的 PHP 代码中,我得到NHHloywxlybbANIH5dS7SQ==
了加密字符串。
但是,使用相同的字符串,我得到的结果是n86Mwc5MRXzhT3v3A/uxEA==