2013-07-22 45 views
0

我已经使用Rijndael算法在C#中编写了一个用于加密的代码。现在我想在php中解密加密的值。我试过,但没有得到我加密的确切字符串。 以下是C#中的加密代码。在PHP如何在php中解密C#代码

public string Encrypt(string textToBeEncrypted, string Password) 
{ 

    RijndaelManaged RijndaelCipher = new RijndaelManaged(); 
    ICryptoTransform Encryptor = null; 
    byte[] plainText = null; 
    try 
    { 
     byte[] Salt = Encoding.ASCII.GetBytes(Password.Length.ToString()); 
     PasswordDeriveBytes SecretKey = new PasswordDeriveBytes(Password, Salt); 
     //Creates a symmetric encryptor object. 
     Encryptor = RijndaelCipher.CreateEncryptor(SecretKey.GetBytes(32), SecretKey.GetBytes(16)); 
     plainText = Encoding.Unicode.GetBytes(textToBeEncrypted); 

    } 
    catch (Exception ex) 
    { 
     string str = "Method Name: " + MethodBase.GetCurrentMethod().Name + " | Description: " + ex.Message + ex.InnerException; 
     log.Error(str); 

    } 
    return Convert.ToBase64String(Encryptor.TransformFinalBlock(plainText, 0, plainText.Length)); 

} 

解密代码

function decryptData($value){ 
    $key = "same key used in above c# code"; 
    $crypttext = $value; 
    $iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB); 
    $iv = mcrypt_create_iv($iv_size, MCRYPT_RAND); 
    $decrypttext = mcrypt_decrypt(MCRYPT_RIJNDAEL_256, $key, $crypttext, MCRYPT_MODE_ECB, $iv); 
    return trim($decrypttext); 
} 

我的C#代码解密如下

public string Decrypt(string TextToBeDecrypted, string Password) { 
RijndaelManaged RijndaelCipher = new RijndaelManaged(); 
string DecryptedData; 
byte[] EncryptedData = Convert.FromBase64String(TextToBeDecrypted); 
byte[] Salt = Encoding.ASCII.GetBytes(Password.Length.ToString()); 
//Making of the key for decryption 
PasswordDeriveBytes SecretKey = new PasswordDeriveBytes(Password, Salt); 
//Creates a symmetric Rijndael decryptor object. 
ICryptoTransform Decryptor = RijndaelCipher.CreateDecryptor(SecretKey.GetBytes(32),SecretKey.GetBytes(16)); 
byte[] plainText = Decryptor.TransformFinalBlock(EncryptedData, 0, EncryptedData.Length); 
//Converting to string 
DecryptedData = Encoding.Unicode.GetString(plainText); 
return DecryptedData; 
} 

但要用于加密在PHP.Key相同的代码将是相同的。请建议....

+0

你能告诉一个例子'$ key'在PHP decrytion前的base64字符串? –

+0

似乎你base64它在你的非PHP代码,不要忘了base64_decode在PHP中(除非我不记得正确的mcrypt params,我没有用太多)。 –

+0

Hi @AmalMurali,$ key包含多达12个字符的字母ie.ABCDEFGPQRUV – pise

回答

1

以下检查应该可以解决您的问题。

  1. 你需要有加密和decrytion.In PHP代码相同的模式,你正在使用decryption.check ECB模式,如果您使用的是C#一样ECB模式。

  2. 在c#中生成密钥和iv以进行加密,并使用相同的值进行解密。在php解密代码中生成密钥或iv。

  3. 解码