c#和php之间的RSA集成

Posted

技术标签:

【中文标题】c#和php之间的RSA集成【英文标题】:RSA integration between c# and php 【发布时间】:2013-08-25 12:53:06 【问题描述】:

我想将加密数据作为 c# 项目的一部分发送到 php。 php 页面应该对数据进行解密并对其执行一些操作,然后再次对其进行加密,并将其返回给 c# 应用程序。 kyes 的外观存在问题: rsa 私钥:

uGUskwU/GVS1HjBVBa9ECPDRH04fH............

php 私钥:

-----开始 RSA 私钥----- MIICXAIBAAKBgQDARufsW5Z9I+P96RdfDEq8r5XYaC ......

我如何整合这两者,或者在 C# 中除了密码学之外我还可以使用另一个类吗?

【问题讨论】:

【参考方案1】:

尝试使用:http://phpseclib.sourceforge.net/

生成密钥:

openssl genrsa -out private.pem 1024
openssl rsa -in private.pem -out public.pem -outform PEM -pubout

复制到php:

<?php
include('Crypt/RSA.php');

$privateKey="-----BEGIN RSA PRIVATE KEY-----
MIICXQIBAAKBgQDr5KvAc6JX22BdpsfQbWam8rjkwJzTC954XQzhLOPeGiAGfkPm
CLYhBrmxZN6Nxisei***9yzrRjYeccr+s3A/8q1EbdhmmM4+AxdNzATEsUxL//MS
VXCaoJhGOfXswokFT8HQod9M6VMmuyDaw9iEorLavV6J/nCmq2HIutcbbwIDAQAB
AoGBAMt2dgnN8zXSW2ELrIcDBapz6rQrylhigWXR5H0IKhb087CGEeyEkQsVcO8o
MKmaRrDWcKT00IKyEZXa0pszjFmD6f90H6TrV6BwZKEynAUVqaX4CCn6x9wgppMA
hWg3eYgoUME3Xgr1Iugb4rqtocEL7Vww/NoUgLXhzHH4RNz5AkEA+mZN2189Te3m
LmXFIJhV+GxrDmYrgJ0csjoEFHAxKJ52lsXTe1VODWbGWAv59jOrbUKe/aQaj4N1
IcTinF3jBQJBAPErTwBKvHznU9dC0eY+JRpwm4Xb9zCNqaG/Ir5N8Gc1U0YLJh9D
vRhtyT9+shwRPznklkc8DKwFaEU7HSiw9uMCQGLK9FLmG6jggN2zd3gpwlmWZRK0
StueoVDMRQnPTgXpp35LJOpXOMle0EiyyPdTYYJlM5d9JKGUyyT8qi/pdwUCQQCE
jp9vs6SCqsukh+/DM+lE7RwuqUbnAxZ39wzruP8oW2EYIMylZqArKzzwj3zqfHha
I9CN+u2kJ5y2YNWYJhytAkA53cDUSL9Wo9pq5hw1C1SWNcimteeQmfQ8f0SMegDW
fZ4rCjGczF82UpB12Cqo8SiK8xrCZAxfnSmSI248oCWe
-----END RSA PRIVATE KEY-----";
$publicKey="-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDr5KvAc6JX22BdpsfQbWam8rjk
wJzTC954XQzhLOPeGiAGfkPmCLYhBrmxZN6Nxisei***9yzrRjYeccr+s3A/8q1E
bdhmmM4+AxdNzATEsUxL//MSVXCaoJhGOfXswokFT8HQod9M6VMmuyDaw9iEorLa
vV6J/nCmq2HIutcbbwIDAQAB
-----END PUBLIC KEY-----";

$rsa = new Crypt_RSA();
$rsa->loadKey($publicKey); // public key

$plaintext = 'I am a secret.. shhhhhh.';

$rsa->setEncryptionMode(CRYPT_RSA_ENCRYPTION_PKCS1);
$ciphertext = $rsa->encrypt($plaintext);

$rsa->loadKey($privateKey); // private key
echo $rsa->decrypt($ciphertext);
?>

您可以使用不同的密钥,但 php 代码必须使用 C# 公钥加密数据,而 C# 代码必须使用 php 公钥加密发布到 php 代码的数据。

您也可以只有两把钥匙,一把私人钥匙和一把公共钥匙,并在双方使用。

看看在 C# 端执行此操作的答案:https://***.com/a/1162519/2715306 还有这个:https://***.com/a/251757/2715306

【讨论】:

以上是关于c#和php之间的RSA集成的主要内容,如果未能解决你的问题,请参考以下文章

dotnet c#中的公钥RSA加密

PHP与Java集成开发详解

使用OpenSSL做RSA签名验证 支付宝移动快捷支付 的server异步通知

GitHub 集成 API 的 JWT 错误凭据

Android 支付宝快捷支付集成及ALI64错误的有效解决

C# 和 Flash 集成