我正在尝试将C#函数转换为PHP。将c#Rijndael函数转换为php函数
这里是C#功能:
public string Encrypt(string Value)
{
string RetVal = "";
if(Value != string.Empty && Value != null)
{
MemoryStream Buffer = new MemoryStream();
RijndaelManaged RijndaelManaged = new RijndaelManaged();
UnicodeEncoding UnicodeEncoder = new UnicodeEncoding();
byte[] KeyArray = new Byte[] { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 };
byte[] IVArray = new Byte[] { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 };
try
{
byte[] ValueBytes = UnicodeEncoder.GetBytes(Value);
CryptoStream EncryptStream = new CryptoStream(Buffer,
RijndaelManaged.CreateEncryptor(KeyArray, IVArray),
CryptoStreamMode.Write);
EncryptStream.Write(ValueBytes, 0, ValueBytes.Length);
EncryptStream.FlushFinalBlock();
// Base64 encode the encrypted data
RetVal = Convert.ToBase64String(Buffer.ToArray());
}
catch
{
throw;
}
}
return RetVal;
}
,这里是我的PHP的尝试:
function EncryptString ($cleartext)
{
$cipher = mcrypt_module_open(MCRYPT_RIJNDAEL_128, '', MCRYPT_MODE_ECB, '');
$key128 = '111111111111111111111111111';
$iv = '111111111111111111111111111';
if (mcrypt_generic_init($cipher, $key128, $iv) != -1) //Parameter iv will be ignored in ECB mode
{
$cipherText = mcrypt_generic($cipher,$cleartext);
mcrypt_generic_deinit($cipher);
$encrypted = (bin2hex($cipherText));
return base64_encode($encrypted);
}
}
目前,当我编码测试短语 “测试” 使用这两个功能,我得到不同的价值。它看起来像PHP版本需要一个字符串为$key
和$iv
值,其中C#版本需要一个字节数组。
我该如何修改我的PHP函数来模仿C#函数?
c#的功能是第三方,我无法改变它;我需要用PHP编写相当于给定的字符串以相同的方式编码
我不知道Rijndael的函数是如何工作的,但是在您的PHP版本中'1'的数量是11而不是.NET版本中'1'的数量? – mellamokb
'try {...} catch {throw; }只是代码污染。 –
[Rewrite Rijndael 256 C#Encryption Code in PHP]可能的重复(http://stackoverflow.com/questions/3505453/rewrite-rijndael-256-c-sharp-encryption-code-in-php) –