:.net 프레임 워크 4.7에서 ECDiffieHellmanCng 구현의 비밀 계약에 대한 질문이 있으십니까? 내가 다음 코드를 한
var curve = ECCurve.NamedCurves.nistP256;
var ecdhSender = ECDiffieHellman.Create(curve);
var ecdhReceiver = ECDiffieHellman.Create(curve);
나의 이해는 나도 ecdhSender 객체를 사용 ecdhReceiver.PublicKey를 사용하거나 ecdhSender.PublicKey와 ecdhReceiver 객체를 사용하는 비밀 계약을 계산 할 수 있어야하고 모두 비밀 계약 값을해야한다는 것입니다 동일 하십시요. 이것이 잘못된 가정이라면 알려주십시오.
string receiverHexString = null;
using (SafeNCryptSecretHandle secretAgreement = (ecdhReceiver as ECDiffieHellmanCng).DeriveSecretAgreementHandle(ecdhSender.PublicKey))
{
byte[] secretAgreementBytes = new byte[32];
IntPtr pointer = secretAgreement.DangerousGetHandle();
Marshal.Copy(pointer, secretAgreementBytes, 0, secretAgreementBytes.Length);
receiverHexString = BitConverter.ToString(secretAgreementBytes).Replace("-", string.Empty).ToLower();
Console.WriteLine($"receiver secretAgreement: 0x{receiverHexString}");
}
string senderHexString = null;
using (SafeNCryptSecretHandle secretAgreement = (ecdhSender as ECDiffieHellmanCng).DeriveSecretAgreementHandle(ecdhReceiver.PublicKey))
{
byte[] secretAgreementBytes = new byte[32];
IntPtr pointer = secretAgreement.DangerousGetHandle();
Marshal.Copy(pointer, secretAgreementBytes, 0, secretAgreementBytes.Length);
senderHexString = BitConverter.ToString(secretAgreementBytes).Replace("-", string.Empty).ToLower();
Console.WriteLine($"sender secretAgreement: 0x{senderHexString}");
}
Assert.AreEqual(receiverHexString, senderHexString);
내 주장이 실패 :
ECDiffieHellman.Create이 ECDiffieHellman 형식을 반환하기 때문에
, 내가 코드를 다음과 쓴 것은 비밀 계약을 얻을 수 있습니다. 분명히 나는 비밀 계약이 동일하다고 가정한다면 어떤 것을 잘못하고있다.어떻게 핸들에서 바이트를 추출합니까? 또는 다른 것?
달성하려는 목표는 무엇입니까? NCRYPT_SECRET_HANDLE 구조체는 불투명합니다. 메모리를 읽지 않아야합니다. – bartonjs
자세한 단계가있는 파트너의 결과를 확인하려고합니다. 제 질문의 첫 부분에서 내 가정이 정확하거나 틀린 경우 의견을 남길 수 있습니까? – Raghu