Строка, зашифрованная в C # Используя TripleDES, необходимо расшифровать в переполнении стека

Код C # выглядит так (не может изменить его, так как он находится в системе клиента).

namespace Common {
public static class EncryptionHelper
{

private const string cryptoKey = "password";

// The Initialization Vector for the DES encryption routine
private static readonly byte[] IV = new byte[8] { 240, 3, 45, 29, 0, 76, 173, 59 };

/// <summary>
/// Encrypts provided string parameter
/// </summary>
public static string Encrypt(string s)
{

string result = string.Empty;

byte[] buffer = Encoding.ASCII.GetBytes(s);

byte[] k = Encoding.ASCII.GetBytes(cryptoKey);

TripleDESCryptoServiceProvider des = new TripleDESCryptoServiceProvider();
MD5CryptoServiceProvider MD5 = new MD5CryptoServiceProvider();


des.Key = MD5.ComputeHash(ASCIIEncoding.ASCII.GetBytes(cryptoKey));

des.IV = IV;

result = Convert.ToBase64String(des.CreateEncryptor().TransformFinalBlock(buffer, 0, buffer.Length));

return result;
}
}
}

Я нашел, что клиент взял этот класс отсюда: http://johnnycoder.com/blog/2008/07/03/c-encryption-decryption-helper-class/

Я не очень знаком с C # и мне нужно расшифровать строку в PHP, зашифрованную с
этот код

Когда я делаю «md5 ($ key, true)», я не получаю тот же результат, что и «MD5.ComputeHash (ASCIIEncoding.ASCII.GetBytes (cryptoKey));», не знаю почему.

Как конвертировать «byte [] IV» в строку PHP?

Любая помощь будет оценена.
Спасибо.

4

Решение

Удалось заставить это работать:

class Crypter
{

/**
*
* Encryption key
*
* @var
*/
protected $key;

/**
*
* Encryption vector
*
* @var
*/
protected $iv;

public function __construct()
{

$this->key = config('auth.triple_des_key');
$this->iv = implode(array_map("chr", config('auth.triple_des_iv')));
}


/**
*
* Decrypts string using tripleDES method.
*
* @param $input String
* @return String
*/
public function decryptTripleDES($input)
{

$td = mcrypt_module_open(MCRYPT_3DES, '', MCRYPT_MODE_CBC, '');

$encryptedData = base64_decode($input);

$key = iconv('utf-8', 'us-ascii//TRANSLIT', $this->key);

$key = md5($key, true);
$key .= substr($key, 0, 8);

mcrypt_generic_init($td, $key, $this->iv);

$decryptedData = mdecrypt_generic($td, $encryptedData);
mcrypt_generic_deinit($td);

//remove the padding text
$block = mcrypt_get_block_size("tripledes", "cbc");

$packing = ord($decryptedData{strlen($decryptedData) - 1});

if ($packing and ($packing < $block)) {
for ($P = strlen($decryptedData) - 1; $P >= strlen($decryptedData) - $packing; $P--) {
if (ord($decryptedData[$P]) != $packing) {
$packing = 0;
}
}
}

$decryptedData = substr($decryptedData, 0, strlen($decryptedData) - $packing);

return $decryptedData;
}
}
2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]