gpt4 book ai didi

c# - RSA - 负指数加密

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:10:38 25 4
gpt4 key购买 nike

伙计们,我正在尝试使用公共(public)和私有(private)指数和模数加密(实际签名)数据,它在 C#.NET 中,我不能使用 RSACryptoServiceProvider 因为它还需要两个质数和其他 CRT 的东西。

所以我正在尝试做以下事情:

private Byte[] signData()
{
BigInteger biPrivEx = new BigInteger(this.privEx); // Those are byte[]
BigInteger biPubEx = new BigInteger(this.pubEx);
BigInteger biMod = new BigInteger(this.mod);

BigInteger cyph = BigInteger.ModPow(new BigInteger(pkcs11), biPrivEx, biMod); // This raise exception

return cyph.ToByteArray();;
}

但问题是我得到了 Out Of Range Exception 因为我的私有(private)指数是负数。

我做错了什么?还是可以从中轻松恢复 CRT?或者也许有更好的方法吗?在不同的程序中,我可以使用我正在使用的数据进行此操作,因此我有引用来验证它。

最佳答案

问题是您首先得到了一个负的私有(private)指数。取决于你如何得到这个 splinter 的指数尝试:

  1. 向其添加n
  2. 00 字节连接到数组,使其正确解析。

您还应该注意字节序问题。 .net 的 BigInteger 使用小端,其他二进制格式可能使用大端。


尝试:

BigInteger ParseBinaryLE(byte[] raw)
{
return new BigInteger(raw.Concat(new byte[]{0}).ToArray());
}

BigInteger ParseBinaryBE(byte[] raw)
{
return new BigInteger(raw.Reverse().Concat(new byte[]{0}).ToArray());
}

据我所知,当您知道 e 时,也可以恢复 PQ(以及其余参数),dn

关于c# - RSA - 负指数加密,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9430343/

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