首页 > 解决方案 > 如何在 .netcore/Linux 中实现 Diffie Hellman

问题描述

ECDiffieHellmanCng-> 平台不支持

ECDiffieHellmanOpenSsl-> PublicKey.ToByteArray()-> 不支持平台

这是其他人提出的基本相同(未回答)的问题,7 个月前 如何在 Linux 上序列化和反序列化 ECDiffieHellmanOpenSsl 的公钥?

如果有办法驯服提供的课程,我想避免引入第 3 方部门。

标签: c#.net-corecryptographydiffie-hellman

解决方案


ECDiffieHellmanCngLinux 上不支持。

Linux 使用ECDiffieHellmanOpenSsl,但请注意

涉及的类型不在平台之间转换

请参阅https://github.com/dotnet/corefx/blob/1841042b99062de13dc80098cede9413be569238/Documentation/architecture/cross-platform-cryptography.md

您可以找到一些在测试套件中如何使用它的示例,例如

[Fact]
public void VerifyDuplicateKey_ValidHandle()
{
    using (var first = new ECDiffieHellmanOpenSsl())
    using (SafeEvpPKeyHandle firstHandle = first.DuplicateKeyHandle())
    using (ECDiffieHellman second = new ECDiffieHellmanOpenSsl(firstHandle))
    using (ECDiffieHellmanPublicKey firstPublic = first.PublicKey)
    using (ECDiffieHellmanPublicKey secondPublic = second.PublicKey)
    {
        byte[] firstSecond = first.DeriveKeyFromHash(secondPublic, HashAlgorithmName.SHA256);
        byte[] secondFirst = second.DeriveKeyFromHash(firstPublic, HashAlgorithmName.SHA256);
        byte[] firstFirst = first.DeriveKeyFromHash(firstPublic, HashAlgorithmName.SHA256);

        Assert.Equal(firstSecond, secondFirst);
        Assert.Equal(firstFirst, firstSecond);
    }
}

https://github.com/dotnet/corefx/blob/a10890f4ffe0fadf090c922578ba0e606ebdd16c/src/System.Security.Cryptography.OpenSsl/tests/EcDiffieHellmanOpenSslTests.cs


推荐阅读