OpenSSL을 암호화에 사용하는 코드를 얻는 방법, C#으로 작성한 다른 프로그램에서 사용할 수있는 Microsoft 암호화 공급자를 사용하는 방법을 빠르게 배우려고합니다. .그물.RSA_sign 및 RSACryptoProvider.VerifySignature
더 중요한 것은 OpenSSL 코드에서 생성 된 RSA 메시지 서명을 C# 프로그램에서 확인하려고합니다.
RSACryptoServiceProvider
객체로
- 수입 상대방의 공개 키 : C#에서
// Code in C, using the OpenSSL RSA implementation char msgToSign[] = "Hello World"; // the message to be signed char signature[RSA_size(rsa)]; // buffer that will hold signature int slen = 0; // will contain signature size // rsa is an OpenSSL RSA context, that's loaded with the public/private key pair memset(signature, 0, sizeof(signature)); RSA_sign(NID_sha1 , (unsigned char*)msgToSign , strlen(msgToSign) , signature , &slen , rsa); // now signature contains the message signature // and can be verified using the RSA_verify counterpart // .. I would like to verify the signature in C#
, 나는 다음을 수행합니다 : 서명을 생성하는 코드는 다음과 같이 보입니다 이 서명
- 의는 서명을 제가했습니다
을 확인하려고 처음 두 파트가 작동합니다 (C# 코드에서 C의 OpenSSL 코드로 RSA 암호화 텍스트를 보내고 성공적으로 암호 해독 할 수 있으므로 공개 키가 제대로로드되고 있음을 확인했습니다)
C#에서 서명 확인, 나는 RSACryptoServiceProvider의 VerifySignature 메소드를 사용해 보았지만 작동하지 않았다. 인터넷에서 파고 들자면 .NET이 OpenSSL보다 서명 생성에 다른 방법을 사용한다는 일부 모호한 정보 만 찾을 수있었습니다. 그래서, 이것을 어떻게 성취 할 수 있는지 아는 사람이 있습니까? 요청이 있었다 때문에
편집
, 여기 당신이 당신의 C# 코드를 보였다 경우 도움이 될
byte[] receivedSignature;
// ....
// receivedSignature is set to the byte array generated by the OpenSSL side
// I've verified this much is working correctly
// I use my utility to parse a PEM file and extract the other side's public key
// also, verified to be working correctly - the public key is good.
RSACryptoServiceProvider rsa = MyPEMLoader.LoadFromFile("publicKey.pem");
string msgToVerify = "Hello World";
byte[] msgBytes = Encoding.ASCII.GetBytes(msg); // other side uses ASCII, so do the same
bool verified = rsa.VerifyHash(msgBytes, "SHA1", receivedSignature);
// verfied is false.. verfification failed!
이 문제에 대한 해결책은 무엇입니까? 나는 똑같은 일을하려하고있다. – theringostarrs