2013-06-04 2 views
0

Мне нужно преобразовать код из C# в PHP с одинаковыми результатами. В C# я закончил его довольно быстро, но теперь нужно преобразовать следующий код PHP:Как расшифровать текст, который был зашифрован с использованием RSA в C#

public static string RsaDecrypt(string privateKey, string src) 
{ 
    CspParameters csp = new CspParameters(); 
    csp.Flags = CspProviderFlags.UseMachineKeyStore; 
    RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(csp); 
    rsa.FromXmlString(privateKey); 
    return RsaDecrypt(rsa, src); 
} 

public static string RsaDecrypt(RSACryptoServiceProvider rsa, string src) 
{ 
    byte[] srcData = Convert.FromBase64String(src); 
    byte[] destData = rsa.Decrypt(srcData, false); 
    return Encoding.UTF8.GetString(destData); 
} 

Я пытаюсь часов, и я не могу, я использую phpseclib0.2.1a файл и код:

Pastebin

Проблема в PHP возвращает следующую ошибку:

Notice: Decryption error in E:\AppServWWW\Request\Flash\Crypt\RSA.php on line 1582

@EDIT: Мой $ _GET [ "р"] является

cwQPQLSW%2FQ70AUmBzkZ9c7d9MrEAcPAAN1lRG937XZuibDOE304i8894uowlC1OANnWEim6suOxzhEHZl0BR1G1audk4CWG1TUSqAo4MO5FBfVbmcLVMx1KPV9%2FeMzil%2BHM1XwyX3Dm0h%2F0uAxORfpa3waq0iOemkUYBq2lXDEU%3D

+0

Кроме того, сообщите нам, какая строка - 1582 ... – pattyd

+0

if ($ lHash! = $ LHash2) { user_error ('Ошибка дешифрования', E_USER_NOTICE); return false; } –

+0

1) Вы не опубликовали свой код шифрования. 2) Установка второго параметра 'Decrypt' на' false' означает, что вы используете плохое дополнение. 3) Рассмотрите возможность шифрования фактических данных с помощью AES и только шифрования ключа с помощью RSA. RSA следует использовать только для шифрования коротких данных. – CodesInChaos

ответ

0

Последняя версия phpseclib является 0.3.1 так, во-первых, я бы порекомендовал вам обновить.

Второй ... phpseclib делает OAEP дополнением по умолчанию. C#, по-видимому, делает дополнение PKCS1 по умолчанию. Поэтому вам нужно будет сделать $rsa->setEncryptionMode(CRYPT_RSA_ENCRYPTION_PKCS1);, прежде чем делать фактическое дешифрование в PHP.

+0

Спасибо, код работал как надо. Обновлен мой phpseclib и добавлен ваш код, и он сработал =] Большое спасибо. –

+0

Это совсем не так. Вы должны использовать OAEP для обоих, а не для PKCS # 1v1.5. Старшая схема заполнения ошибочна и позволяет атаковать оскорбление. – CodesInChaos

 Смежные вопросы

  • Нет связанных вопросов^_^