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