Крипто с открытым закрытым ключом - PHP & C # - PullRequest
0 голосов
/ 24 ноября 2011

Может кто-нибудь направить меня в правильном направлении.

Я пытаюсь зашифровать строковый сервер (PHP) с помощью личного ключа, а затем расшифровать его на стороне клиента (c #) с помощью открытого ключа, чтобы проверить подлинность отправленного сообщения.

Спасибо

Ответы [ 3 ]

1 голос
/ 25 ноября 2011

Не пытайтесь придумать собственную схему шифрования, основанную на базовых алгоритмах шифрования, таких как RSA.Протоколы безопасности очень трудно понять правильно;вам нужно думать не только о шифровании или подписывании данных, но и об атаке «посредник», повторных атаках, атаках оракулов и тому подобном.

Я предлагаю вам использовать стандартизированный, хорошо проверенный протокол безопасностиэто легко использовать и понять: использовать HTTPS.

0 голосов
/ 25 ноября 2011

То, что вы хотите сделать, обычно называется подпись , а не шифрование .

Даже если в учебниках подпись RSA объясняется как «шифрование с помощью закрытого ключа, дешифрование»с общедоступным ", в действительности он использует несколько иную процедуру (в части, предшествующей фактическому" шифрованию "), и, таким образом, у вас есть другие функции для подписи, чем для шифрования.

Для подписи в PHP это выглядитнапример, вы можете использовать функцию openssl_sign .

Для проверки подписи в C # вы можете использовать RSACryptoServiceProvider класс .NET с его методом VerifyData.

Конечно, если вашей целью является просто аутентифицированный перенос между двумя объектами в Интернете (т. Е. С сервера на клиент), используйте SSL / TLS, это стандартное решение.Вы можете использовать свой собственный сертификат (или сертификат своего собственного ЦС) вместо дорогостоящего сертификата коммерческого ЦС, если вы распространяете корневой сертификат вместе со своим приложением.

0 голосов
/ 25 ноября 2011

.NET содержит стандартные функции для шифрования / дешифрования RSA.

Чтобы использовать RSA в PHP, вы можете найти множество реализаций в Google.

Единственная проблема, с которой вы столкнетесь в будущемпри передаче данных между PHP и программой .NET:

  • вам, вероятно, придется использовать строку base64
  • , а если вы хотите отправлять данные с помощью GET или POST, вы должны использовать это решение

ДОБАВЛЕНО

RSA - это простой алгоритм, который не сложно реализовать вручную.

Чтоо этом решении?

Та же тема обсуждалась здесь и здесь .

...