openssl_private_decrypt()를 사용하여 PHP 측에서 해독 할 수 있도록 C# 응용 프로그램에서 문자열을 암호화하려고합니다. 해독하려고하는 초기 공개 키는 PHP의 openssl_pkey_get_details ($ privateKey); 앞서 이야기하면 chilkat을 사용하여 할 수 있지만 IOS 용 모노 터치에서는 작동하지 않으므로 나를 위해 쓸모가 없습니다 (비용도 많이 듭니다). 내가 그것을하고있어 방법 코드 예제가있다 :openssl_private_decrypt()와 함께 사용하는 공개 키가있는 RSA C# 암호화 : Chilkat, BouncyCastle, RSACryptoServiceProvider
void TestEncryption(string publicKey, string data)
{
var bytes = Encoding.UTF8.GetBytes(data);
//by using chilkat
var key = new Chilkat.PublicKey();
var result = key.LoadOpenSslPem(publicKey);
var ck = new Chilkat.Rsa();
ck.UnlockComponent("blablabla");
var keyXml = key.GetXml();
ck.ImportPublicKey(keyXml);
var ckBytes = ck.EncryptBytes(bytes, false);
//by using BouncyCastle
Object obj;
using (TextReader sr = new StringReader(publicKey))
{
PemReader pem = new PemReader(sr);
obj = pem.ReadObject();
}
var par = obj as Org.BouncyCastle.Crypto.Parameters.RsaKeyParameters;
RsaEngine e = new RsaEngine();
e.Init(true, par);
var bcBytes = e.ProcessBlock(bytes, 0, bytes.Length);
//RSACryptoServiceProvider. don't know exectly how to initialize it, one way that must work i think is from chilkat's xml, just to test
RSACryptoServiceProvider csp = new RSACryptoServiceProvider(1024);
csp.FromXmlString(keyXml);
//also tryed to initialize like this:
//var pp = csp.ExportParameters(false);
//pp.Modulus = byteKey; //this one is publicKey, stripped from --begin-- and --end-- sections and encoded from base64 to byte array (162 bytes)
//csp.ImportParameters(pp);
//
//or if i do
//var pp = new RSAParameters();
//pp.Exponent = Convert.FromBase64String("AQAB");
//pp.Exponent array is the same: {1, 0, 1};
var cspBytes = csp.Encrypt(bytes, false); //or (bytes, true), doesn't matter
//this function sends request to php and returns result of decryption attempt
Debug.WriteLine(ExecRequest(ckBytes));
Debug.WriteLine(ExecRequest(bcBytes));
Debug.WriteLine(ExecRequest(cspBytes));
}
출력은 : 나는 무엇을 놓치고
success
decryption failed
decryption failed
은?
-1 그리고 보류 중입니까? 롤. 내가 뭘 묻는 지 분명하다 :이 데이터가 PHP의 openssl_private_decrypt()로 해독되도록 C# 응용 프로그램 내에서 RSA를 사용하여 데이터를 암호화하는 방법. 그것을 위해 chilkat을 사용하지 마십시오. BouncyCastle의 암호화가 작동하지 않는 이유와 RSACryptoServiceProvider와 함께 사용하기위한 공개 키 모듈을 얻는 방법이 명확하지 않습니다. –
일반적으로 도움이 될 두 가지 유형의 사람들이 있습니다. 당신이하는 일을 정확히 수행 한 사람들이 있으며, 따라서 "실종 된 것"을 쉽게 발견 할 수 있습니다. 그리고 문제를 보여주는 코드를 붙잡고 작업 할 수 있다면 도움을주고 자하는 사람들이 있습니다. 첫 번째 카테고리는 일반적으로 * 매우 * 작기 때문에 두 번째 카테고리를 목표로하고 싶으므로 해당 도메인의 전문가가 아닌 사람이라도 이해할 수있는 문제에 대한 충분한 정보를 1) 2) 필요한 모든 데이터가 포함 된 완전한 예. –
일부 데이터가 누락되면 미안하지만 코드 샘플을 최대한 접근하기 쉽도록 만들려고했습니다. 심지어 크기를 최소화하면서 테스트 샘플을 다시 작성했지만 여전히 완료되었습니다. 두 번째 범주의 사람들이 누락 된 정보를 알려주십시오. 필요한 데이터는 무엇입니까? 이 코드는 PHP, C# IDE 및 bouncy castle 라이브러리에서 생성 된 공개 키와 개인 키를 사용하여 테스트 할 수 있습니다. http://www.visualstudio.com/en-US/products/visual-studio-express-vs http://www.bouncycastle.org/csharp/ –