Cryptography I';我正在使用Wincrypt for Diffie Hellman--我可以以明文形式导出共享秘密吗?
好的——多亏了,我才能够让Wincrypt生成Diffie-Hellman密钥对。我找到了导出公钥的方法,以及如何导入另一方的公钥。根据文档,在导入另一方的公钥时,已计算出共享密钥。太好了 我现在需要知道这个共同的秘密,但我认为这是不可能的。除非我调用Cryptography I';我正在使用Wincrypt for Diffie Hellman--我可以以明文形式导出共享秘密吗?,cryptography,cryptoapi,diffie-hellman,Cryptography,Cryptoapi,Diffie Hellman,好的——多亏了,我才能够让Wincrypt生成Diffie-Hellman密钥对。我找到了导出公钥的方法,以及如何导入另一方的公钥。根据文档,在导入另一方的公钥时,已计算出共享密钥。太好了 我现在需要知道这个共同的秘密,但我认为这是不可能的。除非我调用CryptSetKeyParam将算法id从CALG\u AGREEDKEY\u ANY更改为某物,否则使用PLAINTEXTKEYBLOB类型简单调用CryptExportKey将失败。。。其他的但我不想要别的,我想要共享的秘密。然而,API似乎
CryptSetKeyParam
将算法id从CALG\u AGREEDKEY\u ANY
更改为某物,否则使用PLAINTEXTKEYBLOB
类型简单调用CryptExportKey
将失败。。。其他的但我不想要别的,我想要共享的秘密。然而,API似乎旨在阻止这种情况
有什么想法吗?我应该注意到,这里的问题是,我只编写了WiFi保护设置实现的一面。因此,协议是为我定义的,而另一方没有给我HcryptKey。这看起来像是您需要的… 发件人:
导入Diffie-Hellman公钥并计算秘密会话密钥
CryptAcquireContext
函数获取Microsoft Diffie-Hellman加密提供程序的句柄cryptgenekey
函数来创建新密钥,或者通过调用CryptGetUserKey
函数来检索现有密钥,来创建Diffie-Hellman密钥CryptImportKey
函数,在pbData
参数中传递指向公钥BLOB的指针,在dwDataLen
参数中传递BLOB的长度,并在hPubKey
参数中传递Diffie-Hellman密钥的句柄。这将导致执行计算,(Y^X)mod P
,从而创建共享密钥并完成密钥交换。此函数调用返回hKey
参数中新的秘密会话密钥的句柄CALG\u AGREEDKEY\u ANY
。在使用密钥之前,必须将其转换为会话密钥类型。通过调用CryptSetKeyParam
函数,将dwParam
设置为KP\u ALGID
,并将pbData
设置为指向表示会话密钥的ALG\u ID
值的指针,例如CALG\u RC4
,可以实现这一点。在CryptEncrypt
或CryptDecrypt
函数中使用共享密钥之前,必须先转换密钥。在转换密钥类型之前对其中任何一个函数的调用都将失败cryptdirestroykey
函数销毁密钥句柄+1@Richard,解释得很清楚。您的建议将解决密钥协议方案,但如果我对使用DH的密钥传输感兴趣,我如何为PKI完成此任务?是否有解决方案?遇到类似的问题。。。