46 lines
2.1 KiB
C#
46 lines
2.1 KiB
C#
using System;
|
|
using System.Numerics;
|
|
|
|
namespace VMPKeygen
|
|
{
|
|
public static class Rsa
|
|
{
|
|
private const string PublicExpB64 = "AAEAAQ==";
|
|
private const string PrivateExpB64 = "CXHXWx/Z9JqetQWwFpvmD72wrDiqQOXMQs18fhAMjWCfJ/f2r3p2io+iB3gqIuu3LGH3WJ8PQuIzvDMnbwAx+8BbAyYhWhGEbxDdifndjQ2KlDV2Hu8NQgCbc5Wjok0rKwQ+Bxeb2i1+Gu3FsnhRNv9RhSyiwcnH/4Q3+ySE3AFAcAUwuQABePjDKCYOfIyx7RKz5h0sG+v10nkPuuCGPSnh+AXDTBIJFH+yNIjkrfweC9A3dv7URyRJumAMgm/SnDU76rTkFw9vZpupQeMtMtIsZIkeFSngip9KImD5zzbb2vKD63Cg9W/Yvqgvro/d+cR5n6P0t4DzfanNIFRGpFrX8/Q5VjuezDKw/4YbsFYwOhzJPRxglmCEjh8cpfxJ11cUXa/hNBV4c4Dp29D0F+w01OlBnFb1Ck9VXur2qJCsqcWtjsnt/VITsxa1jzr+3C2+uvaI4JSd7yLEnTqSaSsRfWuhDXgjY/YWhmyvMzeQeXBGOXKt2j2lY2Fm0WJx";
|
|
private const string ModulusB64 = "pwUqwaM8IOukyx06Lvi5YNQ70JE7pwg7K+pmM/vCe1CUseHKFM1v1m11geDjVsAt38AnaiFs3JhtTs80ySCIxOSyvMw6Cd52k6N6dn7LAx1mxQLJLhYeMMJYbplMHnMLwYN0+IO58OVbEqRyaJV2ExolnK2EYZL7QRXujGY7/sOoOMF3p6GsWJK6kkBJICIoL9hHWBQMO6/9rmls/+EhaWuP80Vx0+H2OlrQ58K+TJeyE393cvb4QufiEPpCNaB50Klee9QUnsjSW/bTnmGn4Bi5+cowRbawUY73Q5I58fMAXiH9ueDPuNMR9YKDgW9GxunLmYkbuwqIp/v7kw3cfMBM0ihhB0B8UhjyAMAGLzJWX3H/H6Zrz41g9PbPjTAxfsTaCrxoqjaTaO4zk9YsI//VX9Fhivcy913SevBpNandziGfYH/oHW2xDy9AfwkE1wuIBlLj7c/k8U1YmmRAmkoCzlmB7EU4ClNltboh1uARUQ6wW30upppnuYhGkTy7";
|
|
|
|
static BigInteger B2Bi(byte[] b) //reverse & make positive
|
|
{
|
|
Array.Reverse(b);
|
|
var b2 = new byte[b.Length + 1];
|
|
Array.Copy(b, b2, b.Length);
|
|
return new BigInteger(b2);
|
|
}
|
|
|
|
private static readonly BigInteger PublicExp = B2Bi(Convert.FromBase64String(PublicExpB64));
|
|
private static readonly BigInteger PrivateExp = B2Bi(Convert.FromBase64String(PrivateExpB64));
|
|
private static readonly BigInteger Modulus = B2Bi(Convert.FromBase64String(ModulusB64));
|
|
|
|
public static byte[] Encrypt(byte[] paddedData)
|
|
{
|
|
var x = B2Bi(paddedData);
|
|
var y = BigInteger.ModPow(x, PrivateExp, Modulus);
|
|
|
|
byte[] ret = y.ToByteArray();
|
|
Array.Resize(ref ret, paddedData.Length);
|
|
Array.Reverse(ret);
|
|
return ret;
|
|
}
|
|
|
|
public static byte[] Decrypt(byte[] data)
|
|
{
|
|
var x = B2Bi(data);
|
|
var y = BigInteger.ModPow(x, PublicExp, Modulus);
|
|
|
|
byte[] ret = y.ToByteArray();
|
|
Array.Reverse(ret);
|
|
return ret;
|
|
}
|
|
}
|
|
}
|