c# - 如何手动设置我们的 p 和 q 值?
问题描述
我有进行加密的 C# 代码,但我想给出自己的 p 和 q,我该如何编辑它?例如,当我尝试给予时;p=11 q=5 手动,它不会让我在方法内部进行编辑。
private static RSAParameters Create(byte[] p, byte[] q, byte[] exponent, byte[] modulus)
{
var addlParameters = GetFullPrivateParameters(
p: new BigInteger(CopyAndReverse(p)),
q: new BigInteger(CopyAndReverse(q)),
e: new BigInteger(CopyAndReverse(exponent)),
modulus: new BigInteger(CopyAndReverse(modulus)));
return new RSAParameters
{
P = p,
Q = q,
Exponent = exponent,
Modulus = modulus,
D = addlParameters.D,
DP = addlParameters.DP,
DQ = addlParameters.DQ,
InverseQ = addlParameters.InverseQ,
};
}
private static RSAParameters GetFullPrivateParameters(BigInteger p, BigInteger q, BigInteger e, BigInteger modulus)
{
var n = p * q;
var phiOfN = n - p - q + 1; // OR: (p - 1) * (q - 1);
var d = ModInverse(e, phiOfN);
//Assert.Equal(1, (d * e) % phiOfN);
var dp = d % (p - 1);
var dq = d % (q - 1);
var qInv = ModInverse(q, p);
//Assert.Equal(1, (qInv * q) % p);
return new RSAParameters
{
D = CopyAndReverse(d.ToByteArray()),
DP = CopyAndReverse(dp.ToByteArray()),
DQ = CopyAndReverse(dq.ToByteArray()),
InverseQ = CopyAndReverse(qInv.ToByteArray()),
};
}
[编辑]
我改变了Create()
下面的内容;
private static RSAParameters Create(byte[] p, byte[] q, byte[] exponent, byte[] modulus)
{
//set number to byte array
int intValueP = 51;
int intValueQ = 7;
byte[] intBytes = BitConverter.GetBytes(intValueP);
byte[] intBytes2 = BitConverter.GetBytes(intValueQ);
var addlParameters = GetFullPrivateParameters(
p: new BigInteger(CopyAndReverse(intBytes)),
q: new BigInteger(CopyAndReverse(intBytes2)),
e: new BigInteger(CopyAndReverse(exponent)),
modulus: new BigInteger(CopyAndReverse(modulus)));
该方法给出错误,说转换过程中有问题,请您帮忙
public static BigInteger ModInverse(BigInteger a, BigInteger n)
{
BigInteger t = 0, nt = 1, r = n, nr = a;
if (n < 0)
{
n = -n;
}
if (a < 0)
{
a = n - (-a % n);
}
while (nr != 0)
{
var quot = r / nr;
var tmp = nt; nt = t - quot * nt; t = tmp;
tmp = nr; nr = r - quot * nr; r = tmp;
}
if (r > 1) throw new ArgumentException(nameof(a) + " is not convertible.");
if (t < 0) t = t + n;
return t;
}
解决方案
推荐阅读
- java - 为什么 Scanner 不在 for 循环中等待输入?怎么修?
- cypress - 如何将标头添加到 xhr-request
- c# - .Net 核心依赖注入,这是每个请求的 SmtpClient 的新实例吗?
- vb.net - Crystal Report SP26 SetDataSource() 方法在 Visual Studio 2019 中客户端的计算机中失败
- python - 具有各种列标准的 Pandas Dataframe sum 函数
- python-3.x - 如何在 Python 中提取列表元组中的所有重复项?
- controls - 使用 C++ Builder 将所有 VCL 控件的属性值复制到另一个控件
- postgresql - 如何修复 pgAdmin 4 不导入我的 csv 文件?
- redirect - IIS 的 Mass 301 重定向 product39/user-manual.html > product39/user-manual/
- html - HTML5 音频标签 - 在 chrome/firefox 中处理 m3u8