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集成的主要内容,如果未能解决你的问题,请参考以下文章
使用OpenSSL做RSA签名验证 支付宝移动快捷支付 的server异步通知