gpt4 book ai didi

c# - .NET 3.5 加密实现和 Mono 2.x 实现之间的区别?

转载 作者:行者123 更新时间:2023-11-30 17:44:46 26 4
gpt4 key购买 nike

我在 Mono (Unity 4.5) 和 MS .NET 下编译和运行相同的代码:

DSAParameters privateKey;
...
DSACryptoServiceProvider dsa = new DSACryptoServiceProvider(csp);
dsa.PersistKeyInCsp = false;
dsa.ImportParameters(privateKey);

私钥是从磁盘加载的,加载的字节数和设置的整数在“privateKey”中在 Mono 和 MS .NET 版本中是相同的。

在 .NET 版本中,dsa.ImportParameters 抛出“错误数据”异常。

我试过了

  • 不同的 .NET 设置(最低 3.5,AnyCPU/x86/x64)
  • 不同的键(有些会抛出,有些不会,但 .NET 签名总是(?)当我验证它们时无效,而那些用相同的键和相同的消息在 Mono 中工作正常。)

MS DSA 实现方式与 Mono 的实现方式在底层是否存在一些根本性的潜在差异,这可能会导致这种情况......?

任何灯罩都是最受欢迎的……这有点让人头疼……

更多信息:

  • key 在 Java 中生成,并在从 DER 格式转换为与 .NET 一起使用后导出(P1363;只是一个接一个的大整数)
  • 使用 BinaryReader 从磁盘加载 key ,并将整数值作为 byte[] 加载到 DSAParameters(P、Q、G 和 X)中
  • 公钥加载到 Java 应用程序中,该应用程序使用 Oracle 实现来验证签名
  • 所有 C# 代码都是“对称的”,即在 Mono 和 MS .NET 应用程序中按原样使用。

更新 2

好吧,我不生气;今天早上我又试了一次;同一 .NET 应用程序在 Mac 上运行(使用 Mono Develop,普通 Vanilla )和一个在 Windows (Visual Studio 2010) 上运行。加载相同的私钥字节,相同的代码路径(至少就 C# 而言)- 仅在 Windows 上出现相同的“错误数据”异常。这是关键:

P: 17801190547854226652823756245015999014523215636912067427327445031444286578873
70207706126952521234630795671567847784664499706507709207278570500096683881440341
29745221171818506047231150039301079959358067395348717066319802262019714966524135
060945913707594956514672855690606794135837542707371727429551343320695239

Q: 864205495604807476120572616017955259175325408501

G: 17406820753240209518581198012352343653860449079456135097849583104059995348845
58231478515974089409507253077970949157594923683005742524387610370844734671801488
76118103083043754985190983472601550494691329488083395492313850000361646482644608
492304078721818959999056496097769368017749273708962006689187956744210730

X: 3505625379966178555918512548923624458026758122

...

最佳答案

.NET Framework 期望维持一些大小关系:

  • Q:20字节
  • G:和P一样长
  • Y,如果存在:与 P 的长度相同
  • 种子,如果存在:20 字节
  • X,如果存在:20 字节

这些只是底层加密提供程序的传递要求:https://msdn.microsoft.com/en-us/library/windows/desktop/aa381987(v=vs.85).aspx#PRIVK_BLOB .

根据上述值的长度,您可能需要在 X 的左侧填充零。

关于c# - .NET 3.5 加密实现和 Mono 2.x 实现之间的区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29035746/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com