해결책을 찾고 있었지만 기능적 해결책을 찾을 수 없습니다. C# 응용 프로그램에서 PHP 서버로 문자열 (AESkey)을 전송해야합니다. 클라이언트 (C#에서)는 key.public.pem 파일 (공개 키)을 다운로드하고 패스를 암호화 한 다음 나중에 서버로 보냅니다. 서버에서 key.pem 파일 (개인 키)을 가져옵니다. PHP에서C#으로 암호화하고 PEM 파일을 사용하여 PHP에서 암호 해독
서버 : C#에서
이function RSADecryption($text) {
//re() reads a document an return it as string
openssl_private_decrypt(base64_decode($text), $decrypted,re("key.pem"));
return $decrypted;
}
클라이언트 :
using System;
using System.Text;
using System.Security.Cryptography;
namespace myApp
{
class MyRSA
{
public static MyRSA getMyRSA()
{
if (_Instance == null)
{
_Instance = new MyRSA();
}
return _Instance;
}
public Boolean setPubKey(string url)
{
System.Net.WebClient wc = new System.Net.WebClient();
try
{
publicKey = wc.DownloadString(url);
}
catch(Exception e)
{
return false;
}
return true;
}
public string crypt(string text)
{
RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
RSAParameters rsaParam = rsa.ExportParameters(false);
rsaParam.Modulus = Convert.FromBase64String(publicKey.Replace("-----BEGIN PUBLIC KEY-----", "").Replace("-----END PUBLIC KEY-----", ""));
rsa.ImportParameters(rsaParam);
byte[] encValue = rsa.Encrypt(Encoding.UTF8.GetBytes(text), false);
return Convert.ToBase64String(encValue);
}
private static MyRSA _Instance;
private static string publicKey;
private MyRSA() {}
}
}
그리고 나중에 내가 주에서 그런 일을 수행
MyRSA rsa = MyRSA.getMyRSA();
rsa.setPubKey(site+"key.public.pem");
sendData(rsa.crypt(user));
나는 문제가에 생각 decrypter (PHP 함수) 아무것도 반환하지 않기 때문에. 잘 모르겠습니다 만, 문제는 RSACryptoServiceProvider를 사용하여 암호화하고 openssl로 해독 할 수 없다는 것입니다. 그들은 다른 매개 변수 또는 다른 유사한 것들을 사용하기 때문에?
예를 들어,이 키 AES 생성 :
CA uW이다 = kImEYGsgu I이 공개 키
----- BEGIN PUBLIC KEY-를 사용
? ---- MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEApxjhdfvCuafPZmE // COM OVxBZvMXjwlcyaCfnTuVdbewQ5ITu6hlJ3vX/oTMbik7DprsWoc2tGk3Rx7RdAPd n3VnPm62 QjaKtETWJ8/5Nzf + MxlVD0t5tzqzhniZ5BKZTtvCI6STbrFYnKcJwTyI eaEDNtre5EaqEBbrYhlGTRxNmz2SdRi9Im9iCSw9pjDVDDJdzmhENhASmFQMeo7N IS8AY3zJSjOQPKFymZrSa8hxWp88K1/igxs12IhhpqNjMiUi29gH2T + QLPTDzwEq EHTY1K6B0zlNuyp8HR5pNOqYymdnoSpCV3z0deTobAF7KiFYp2pXvoNo8Pc19Yl0 mQIDAQAB ----- END의 PUBLIC 키 -----
그리고 암호화 된 암호이었다 :
CgG33ytbS3CuK + rOpJRamQ6e8xCj7Q35m6YxWXc44r/D03VubXZO1f5/zF7Zsc42UOOwqbYahApXBXL6o3J5MVu0cDkjstVoUnFJiPRHWmwq9AA0uvLC55gou + VzvmvRzFO38LMZ2BpsQLOjfv16LGWx7MLfKSVFG C8YVHgv6QlEbDFdd/HJDbqAKOoyQWlKXfVeMKmd8ORnq3 + B3Tmk57O3BHDVOlmezSgf + YN828u4ChZ08JzjgBo7MP2xCl6pLEeZxiFGjRwrTgRfLXQ7aMB/RyeMMHwInJiTS3/M2Mez8C3/+ ZA/DIfrLDA9LVdRYdy2n4AxbtyrLTun4mjDO + pYS3HqZlGn2MW5Orc9VH + 1CPn2omLVj/qqa6tIoFuJOdpxn/Y9 당신의 atencion에 대한
감사합니다. 감사합니다.
이것은 잠재적으로 좋은 질문입니다. 적어도 매우 흥미 롭습니다. 문제를 스스로 해결하기 위해 무엇을했는지, 그리고 어떤 시점에서 문제가 발생했는지 설명해주십시오. (주석에 * 설명하지 말고 질문을 편집하십시오.) –
개인 키가 프로덕션 환경에서 실제로 사용됩니까? 그렇지 않다면 나는 그것을 게시한다고 말하고 싶다. 그런 식으로 사람들은 그것을 당신을위한 대답으로 통합 할 수 있습니다. 전적으로 문제는 openssl이 개인 키가있는 형식을 지원하지 않는 것처럼 간단합니다. 개인 키가 없으면 말할 수 없습니다. – neubert