如何手动设置我们的p和q值?

时间:2019-08-01 06:22:02

标签: c# encryption rsa

我有进行加密的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)));

但是它给了我错误(参见图片)enter image description here

该方法出错,表示转换期间存在问题,请您帮忙

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;
    }

0 个答案:

没有答案