如何用C#中的RSA加密ASCII字符?

如何用C#中的RSA加密ASCII字符?,c#,math,encryption,rsa,modular-arithmetic,C#,Math,Encryption,Rsa,Modular Arithmetic,我对用指数和模计算ASCII值有问题。 我想用RSA算法计算“K”的ASCII值 ascii值中的K为75 c = m^e mod n = 75^41 mod 689 = 316 那么如何用C#将其转换成源代码呢?我收到错误“无法隐式转换类型” 这是我的源代码 int n = 689; int e = 41; int d = 137; string value = "K"; for (int i = 0; i < value.Length; i++) { i

我对用指数和模计算ASCII值有问题。 我想用RSA算法计算“K”的ASCII值

ascii值中的K为75

c   = m^e mod n
    = 75^41 mod 689
    = 316
那么如何用C#将其转换成源代码呢?我收到错误“无法隐式转换类型”

这是我的源代码

int n = 689;
int e = 41;
int d = 137;
string value = "K";

for (int i = 0; i < value.Length; i++)
{
    int c = (int)i;
    c = Math.Pow(i,e);
}
Console.ReadLine();
int n=689;
int e=41;
int d=137;
字符串值=“K”;
for(int i=0;i

一旦你把数组输出,你就可以把它设置成一个变量,然后做你需要做的任何数学运算。

math.Pow的输出是一个双精度的,并且以两个浮点数作为参数。至少,将
Math.Pow(i,e)
的输出转换为int,如下所示:

c = (int)Math.Pow(i,e)
这是关于C#最糟糕的事情之一,我不知道为什么它天生就不支持整数幂运算


什么类型是
i
?可能还需要将其转换为双倍。

因为如果转换为
int
,则
75^41
将溢出。您需要做一些数学技巧
A*B mod N
相当于
(A mod N)*(B mod N)mod N
,因此您只需在循环中进行乘法,每次取余数:

public static int PowModN(int a, int b, int n)
{
    a = a % n;
    int c = 1;
    for(int i=1; i <= b; i++)
        c = (c*a % n);

    return c;
}
publicstaticintpowmodn(inta,intb,intn)
{
a=a%n;
int c=1;

对于(inti=1;我使用了这个方法,但是当我用math.pow()操作它时,这会产生错误,Math.pow输出是一个double,而不是int。将其转换为int或将变量转换为double。我还认为内部参数也需要是double。
75^41
如果转换为
int
,则会溢出。不确定它是否与错误消息有关,但您的代码,即for循环应该在
value[i]
上运行,而不是在
i
上运行。我使用了您的方法,但结果仍然是错误的,错误消息如下“错误4非静态字段、方法或属性“ConsoleApplication1.Program.PowModN(int,int,int)”需要对象引用”如果您的所有代码都在
static Main
中,那么您也可以使
PowModN
static
中。我已经相应地更新了我的答案。@JamesKPolk很好,James。修复了。
public static int PowModN(int a, int b, int n)
{
    a = a % n;
    int c = 1;
    for(int i=1; i <= b; i++)
        c = (c*a % n);

    return c;
}
for (int i = 0; i < value.Length; i++)
{
    int c = (int)i;
    c = PowModN(i,e,n);
}