使用 BouncyCaSTLe 使用 SHA-256 和 ECDSA 的 C# 签名数据每次都会产生不同的签名

标签 c# bouncycastle sha256 ecdsa

我正在关注这个tutorial使用 SHA-256withECDSA 对数据进行签名。

使用相同的私钥和消息,每次都会生成不同的签名结果。我所做的唯一更改是返回 Base64 编码的字符串而不是 Base58

每次签名都应该相同吗?

public static string GetSignature(string privateKey, string message)

{

    var curve = SecNamedCurves.GetByName("secp256k1");

    var domain = new ECDomainParameters(curve.Curve, curve.G, curve.N, curve.H);
    var keyParameters = new

            BC.Crypto.Parameters.ECPrivateKeyParameters(new BC.Math.BigInteger(privateKey),

            domain);

    ISigner signer = SignerUtilities.GetSigner("SHA-256withECDSA");

    signer.Init(true, keyParameters);

    signer.BlockUpdate(Encoding.ASCII.GetBytes(message), 0, Encoding.ASCII.GetBytes(message).Length);

    var signature = signer.GenerateSignature();

    return Convert.ToBase64String(signature);

}

结果示例

MEQCIB0rqb8Dbrh+e2akoCVJaUS4tyJYqfRf8vdz/W2fUOomAiB3D2BaMYjwSgKRQyTd/W+YEn+wT0I4dq1hmgBfe/Sh7g==

MEUCIQDsWxG8Zr7MCemgGylAN+Y32qJYuDmqZMpaPwxTKosJ3AIgE3oSsBjcua/aCvfNXiMfcUM9U92p9aRlAIEopw/wvd0=

MEYCIQCjQ0EDHVFhASuUSPnCGjCb0O1sq3Op+aAl01afjIVviQIhAOnGyGN9cKswFn97de0o/Im9Hswo6AdnLhKIZSUcYbDY

MEYCIQCAqcHyhRcbLtuyimJ4XCHvJcz0p0Wd7FgJ1+07sOsC/gIhAKYwlhRv98C/3XeZE1TujkB9qMn2C99GaguJoWng9+2y

MEUCIQD7ObA0n0JpRNQDe+3udpeKGEk79KsrjHsjv/4Wlj2bigIgZERRSQBEN91HTJHqn+prlwSCKUT4AJx061Gi0tv8Xuw=

最佳答案

所以答案是:它应该是不确定的 - 每次都是不同的

https://en.wikipedia.org/wiki/Nondeterministic_algorithm

关于使用 BouncyCaSTLe 使用 SHA-256 和 ECDSA 的 C# 签名数据每次都会产生不同的签名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49889096/

相关文章:

java - 在 Java 中通过 SHA-256 哈希字符串

c# - 带通滤波器不能旋转超过 90 度

java - nodejs和kotlin中的SHA256不同哈希

c# - Windows Phone 将数据保存到文件

java - 如何验证私钥是否与证书匹配..?

java - 充气城堡安全提供程序不会在 Java 11/12 下加载

java - 用于 GCM 的 JAVA 中 IV 的确定性构造

python - Node & python 不返回相同的 hash256

c# - 单击 asp.net 按钮时如何关闭 Html 窗口?

c# - 在没有 WinForm 控件的情况下在主线程上调用一个方法来调用 Invoke 或 BeginInvoke