C#
public string DecryptText(string input, string password)
{
String[] tempAry = input.Split('-');
byte[] bytesToBeDecrypted = new byte[tempAry.Length];
for (int i = 0; i < tempAry.Length; i++)
bytesToBeDecrypted[i] = Convert.ToByte(tempAry[i], 16);
byte[] passwordBytes = Encoding.UTF8.GetBytes(password);
passwordBytes = SHA256.Create().ComputeHash(passwordBytes);
byte[] bytesDecrypted = Decrypt(bytesToBeDecrypted, passwordBytes);
return Encoding.UTF8.GetString(bytesDecrypted);
}
public byte[] Decrypt(byte[] bytesToBeDecrypted, byte[] passwordBytes)
{
byte[] decryptedBytes = null;
byte[] saltBytes = new byte[] { 5, 7, 3, 5, 2, 6, 7, 8 };
using (MemoryStream ms = new MemoryStream())
{
using (RijndaelManaged AES = new RijndaelManaged())
{
AES.KeySize = 256;
AES.BlockSize = 128;
var key = new Rfc2898DeriveBytes(passwordBytes, saltBytes, 1000);
AES.Key = key.GetBytes(AES.KeySize / 8);
AES.IV = key.GetBytes(AES.BlockSize / 8);
AES.Mode = CipherMode.CBC;
using (var cs = new CryptoStream(ms, AES.CreateDecryptor(),
CryptoStreamMode.Write))
{
cs.Write(bytesToBeDecrypted, 0, bytesToBeDecrypted.Length);
cs.Close();
}
decryptedBytes = ms.ToArray();
}
}
return decryptedBytes;
}
PHP
function DecryptText ($input, $password){
$tempAry = str_replace("-", "", $input);
$bytesToBeDecryptedbin = hex2bin($tempAry);
$bytesToBeDecrypted = unpack('C*', $bytesToBeDecryptedbin);
$bytesToBeDecryptedbinstring = "";
for($i=0;$i<count($bytesToBeDecrypted);$i++){
$bytesToBeDecryptedbinstring=$bytesToBeDecryptedbinstring.chr($bytesToBeDecrypted[$i+1]);
}
$passwordhash = hash('sha256', $password);
$passwordbin = hex2bin($passwordhash);
$passwordBytes = unpack('C*', $passwordbin);
$passwordBytesstring = "";
for($i=0;$i<count($passwordBytes);$i++){
$passwordBytesstring=$passwordBytesstring.chr($passwordBytes[$i+1]);
}
$saltBytes = array(5,7,3,5,2,6,7,8);
$saltBytesstring = "";
for($i=0;$i<count($saltBytes);$i++){
$saltBytesstring=$saltBytesstring.chr($saltBytes[$i]);
}
$keySize = 256; $blockSize = 128;
$key = hash_pbkdf2("sha1", $passwordBytesstring, $saltBytesstring, 1000, 48, true);
$aeskey = ( substr($key,0,$keySize/8) );
$aesiv = ( substr($key,$keySize/8,$blockSize/8) );
$decrypted = mcrypt_decrypt
(
MCRYPT_RIJNDAEL_128,
$aeskey,
$bytesToBeDecryptedbinstring,
MCRYPT_MODE_CBC,
$aesiv
);
$result = "";
for($i=0;$i<strlen($decrypted);$i++){
if($decrypted[$i]==chr(7)) break;
$result = $result . $decrypted[$i];
}
$decryptedarr = unpack('C*', $result);
return $result;
}
sumber:
http://stackoverflow.com/questions/43011612/porting-c-sharp-rfc2898derivebytes-in-php-using-hash-pbkdf2