Расшифровать токен доступа с помощью PHP для шифрования C #

У меня есть URL-адрес API с определенным токеном доступа, который был зашифрован с помощью C # (код ниже), и я хочу расшифровать его с помощью пост-запроса PHP, передав токен доступа параметрам. Может кто-нибудь помочь мне решить эту проблему.

Заранее спасибо!!

Код C # для шифрования:

private String AES_encrypt(String Input)
{
var aes = new RijndaelManaged();
aes.KeySize = 256;
aes.BlockSize = 256;
aes.Padding = PaddingMode.PKCS7;
aes.Key =Convert.FromBase64String("QdZx1B0ZIcLK7DPNRK09wc/rjP4WnxtE");
aes.IV = Convert.FromBase64String("hBSE4tn6e/5c3YVKFZ54Iisi4MiDyCO0HJO+WZBeXoY=");
var encrypt = aes.CreateEncryptor(aes.Key, aes.IV);
byte[] xBuff = null;
using (var ms = new MemoryStream())
{
using (var cs = new CryptoStream(ms, encrypt, CryptoStreamMode.Write))
{
byte[] xXml = Encoding.UTF8.GetBytes(Input);
cs.Write(xXml, 0, xXml.Length);
}
xBuff = ms.ToArray();
}
String Output = Convert.ToBase64String(xBuff);
return Output;
}

До сих пор я пытался расшифровать его с помощью приведенного ниже кода

function strippadding($string)
{
$slast = ord(substr($string, -1));
$slastc = chr($slast);
$pcheck = substr($string, -$slast);
if(preg_match("/$slastc{".$slast."}/", $string)){
$string = substr($string, 0, strlen($string)-$slast);
return $string;
} else {
return false;
}
}
function decrypt($string)
{
$key = base64_decode("DZR");
$iv = base64_decode("Shravan");
$string = base64_decode($string);
return strippadding(mcrypt_decrypt(MCRYPT_RIJNDAEL_256, $key, $string, MCRYPT_MODE_CBC, $iv));
}

Заполните пункты ниже:

Используйте этот ключ и iv ниже.

key = QdZx1B0ZIcLK7DPNRK09wc/rjP4WnxtE

iv= hBSE4tn6e/5c3YVKFZ54Iisi4MiDyCO0HJO+WZBeXoY=

Проведите текст через ваш AES_encrypt() функция и все, что выходит вставить в следующую строку.

зашифрованный текст = поместите зашифрованный текст здесь.

1

Решение

$xXml = openssl_decrypt(
$Output, #openssl_decrypt works with base64 encoded data
'AES-256-CBC',
base64_decode("QdZx1B0ZIcLK7DPNRK09wc/rjP4WnxtE"), #key
OPENSSL_RAW_DATA,
base64_decode("hBSE4tn6e/5c3YVKFZ54Iisi4MiDyCO0HJO+WZBeXoY=") #IV
);

Сейчас $xXml является двоичной формой входной строки в кодировке UTF-8.

И убедитесь, что openssl включен в вашу сборку PHP.

0

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

Вы не предоставили мне зашифрованный текст, чтобы можно было это проверить.

Вот что я думаю вам нужно сделать:

В вашем коде C # вам нужно изменить размер блока на 128 бит:

aes.BlockSize = 128;

В вашем коде C # ваш IV должен иметь длину 128 бит или 16 байтов. Это должно равняться выбранному вами размеру блока.

Так что сейчас это должен быть ваш IV:

IV = HWeR102dxMjRHZlxTqL2aA==

Ваш ключ установлен на 256 битов. Итак, вот 256-битный ключ:

Key = aZUEBKSsYRKA6CGQbwFwvIS8rUnW7YA2hVMNHnnf844=

В C # есть функции, которые автоматически генерируют криптографически стойкую строку для вас определенной длины. Я предлагаю вам найти эти функции и научиться их использовать, чтобы вы могли создавать свои собственные ключи и IV.

Теперь о части PHP.

Вы должны использовать библиотеку OpenSSL вместо библиотеки Mcrypt. Mcrypt устарела и больше не поддерживается. Итак, вот решение OpenSSL.

Поскольку размер блока теперь составляет 128 битов, а размер ключа — 256 битов, он теперь будет совместим с библиотекой openssl. AES-256-CBC функция.

$key = 'aZUEBKSsYRKA6CGQbwFwvIS8rUnW7YA2hVMNHnnf844='; //256 bit key.
$iv = 'HWeR102dxMjRHZlxTqL2aA=='; //128 bit IV length.  The same as the block size that is set in the C#.

function decrypt($string, $key, $iv){

$cipherText = base64_decode($string);  //We are going to use raw data.
return openssl_decrypt($cipherText, 'AES-256-CBC', base64_decode($key), OPENSSL_RAW_DATA, base64_decode($iv));
//Note that I did not specify no padding in the function.  By default it is PKCS#7 which is what is set in the C# code.
}

Лучшее, что я могу сказать, это должно работать для вас. Это предположение основано на том факте, что ваш AES_encrypt() работает правильно и что у вас есть OpenSSL на вашем компьютере. Что вы, вероятно, делаете.

Надеюсь, поможет!

0

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