[英]What does System.Security.Cryptography's DeriveKeyFromHash() actually do?
我正在C#应用程序和用C编程的嵌入式设备之间实现安全交换。System.Security.Cryptography没有有关其任何加密算法“幕后”操作的文档。 为了在C中实现相同的功能,我需要知道这一点,为此我拥有更多的基本库。 具体来说,我想知道ECDiffieHellman.DeriveKeyFromHash(HashAlgorithmName.SHA256)的作用。
我尝试过跟踪API,但最终以对ncrypt.h中的非托管NCryptDeriveKey的调用结束。
该方法似乎不能简单地执行共享机密的SHA256哈希。 我已经在C端完成此操作,并且得到了不同的值。 我知道在C#端收到的公钥是有效的,因为否则,以前的方法将引发异常。 我猜想是某些NIST文档所规定的,数据是追加还是添加在前面,但是是这样吗? 还是我还缺少其他东西?
编辑:原来我在C端做错了什么。 C#行为的额外确认有助于缩小搜索范围。
ECDiffieHellmanCng ecdh = new ECDiffieHellmanCng(myEccKeys);
//This would throw an exception if PeerRawPublicKey was invalid.
var PeerPublicKey = ECDiffieHellmanCngPublicKey.FromByteArray(PeerRawPublicKey.ToArray(), CngKeyBlobFormat.EccPublicBlob);
//How is keyMaterial generated?
byte[] keyMaterial = ecdh.DeriveKeyFromHash(PeerPublicKey, HashAlgorithmName.SHA256, null, null);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.