BouncyCastle 版本冲突 FIPS C#

问题描述 投票:0回答:1

我尝试在 CMAC 函数中使用 FIPS,但遇到版本冲突。我在 Visual Studio 2022、.NET Framework 4.8、C# 中引用了常规 BouncyCastle.Cryptography v2.0.0.0 和 bc-fips-1.0.2.dll V1.0.2 引用。 bc-fips-1.0.2 是参考,因为它有“BouncyCastle.Crypto.Fips”。

本质上有两个冲突,一个与“SecureRandom”冲突,另一个与“CryptoServicesRegistrar.CreateService”冲突。

错误:“CryptoServicesRegistrar”同时存在于“BouncyCastle.Cryptography,Version=2.0.0.0,Culture=neutral,PublicKeyToken=072edcf4a5328938”和“bc-fips-1.0.2,Version=1.0.2.0”中

有人知道解决方法或修复此问题吗?

我希望您能提前提供帮助。

c# visual-studio bouncycastle fips
1个回答
0
投票

您声明您正在使用 NuGet 包 BouncyCastle.Cryptography。如果点击 Project Website,就会被带到 BouncyCastle.org,在那里可以找到 bc-fips-1.0.2.dll。虽然这并不一定意味着它们都使用相同的命名空间,但错误消息表明它们确实如此。

“CryptoServicesRegistrar”类型存在于两者中 'BouncyCastle.Cryptography,版本=2.0.0.0,文化=中性, PublicKeyToken=072edcf4a5328938' 和 'bc-fips-1.0.2,版本=1.0.2.0, 文化=中立,PublicKeyToken=null'

这个问题在这篇post中有描述。

一种可能性是创建两个使用唯一命名空间的类库 - 一种包含使用 FIPS 版本的方法,另一种包含使用非 FIPS 版本的方法。

更理想的选择可能是在 .csproj 文件中使用别名,如本post中所述。


  1. 下载/安装 BouncyCastle.Cryptography 的 NuGet 包。

  2. 这里下载 bc-fips.dll。

  3. 添加对 bc-fips.dll 的项目引用(项目 => 添加引用... => 浏览 => 单击浏览按钮...)

  4. 卸载项目或关闭 Visual Studio。

  5. 修改您的项目文件(.csproj)。

    更改自:

    <PackageReference Include="BouncyCastle.Cryptography" >
    

    致:

    <PackageReference Include="BouncyCastle.Cryptography" Aliases="NonFips">
    

注意:将 NonFips 更改为您喜欢的任何名称。

  1. 重新加载您的项目或在 Visual Studio 中再次打开您的项目。

  2. 在任何 using 指令之前添加以下内容:

    extern alias NonFips;
    
  3. 构建/重建您的项目。

  4. 使用 non-fips 版本(即:BouncyCastle.Cryptography)中的方法时,请确保使用别名(即:NonFips 或任何您命名的别名)以及完全限定的命名空间方法如:

    NonFips.Org.BouncyCastle.Crypto.CryptoServicesRegistrar.GetSecureRandom();
    
© www.soinside.com 2019 - 2024. All rights reserved.