我想将用C编写的这段代码转换为C# [英] i want to conver this piece of code written in C to C#

查看:71
本文介绍了我想将用C编写的这段代码转换为C#的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

// Provides the key generation functions
//MAX and MIN values for random numbers
unsigned int MAX=256;
unsigned int MIN=1;
//function to calculate the multiplicative inverse of e mod r, using the
extended Euclidean algorithm
int gencongrel (unsigned int e, unsigned int r)
{
long temp, u, v, quotient, previous_u, previous_v;
u = 0;
previous_u = 1;
v = 1;
previous_v = 0;
while (r != 0) //keep calculating until it reaches 0
{
temp = r; //store the old value
quotient = e / r; //quotient of e and r
r = e % r; //calculate the new value, e mod r
e = temp; //restore the old value
temp = u; //store the old value
u = previous_u - quotient * u; //calculate the new u using the previous
one and quotient
previous_u = temp; //restore the old value
temp = v; //store the old value
v = previous_v - quotient * v; //calculate the new v using the previous
one and exponent
previous_v = temp; //restore the old value
}
return (previous_u);
}
//function to calculate the greatest common denominator of two numbers,
using the Euclidean algorithm
int gcd(unsigned int number, unsigned int r)
{
unsigned int temp;
while (r != 0 ) //keep calculating until it reaches 0
{
temp = r; //store the old value
r = number % r; //calculate the new value, number mod r
number = temp; //restore the old value
}
return number;
}
//function to generate a number coprime to r called from gen_keys
int gencoprime(unsigned int r)
{
unsigned int number;
do
{
do //Generate a random number between MIN and MAX
{
number = rand() % MAX;
} while (number < 3);
} while (gcd(number, r) != 1); //keep generating numbers until the gcd of
the generated number and r is 1
return (number);
}
//function to generate prime numbers, called from gen_keys
int genprime (void)
{
unsigned int modulus, modulus_squared, prime, number, result;
prime = 0; //Assume the number is not prime
result = 0;
while (prime == 0) //While it is not prime
{
modulus = 2; //Can start at 2 dividing by 1 not needed
modulus_squared = 4;
do //Generate a random number between MIN and MAX
{
number=rand() % MAX;
} while (number < MIN);
while (modulus_squared < number) //Only need to check up to the square
root of the number
{
result = number % modulus; //The result is the remainder after
dividing the number by the current modulus
if (result == 0) //If the remainder is 0
{
prime = 0; //The number is not prime
break;
}
modulus_squared = modulus * modulus;
if (modulus == 2) //If the current modulus is 2
{
modulus++; //Add one to make next modulus 3
}
else
{
modulus++; //Otherwise add 2 to keep modulus odd
modulus++;
}
}
if (result != 0) //If the result is 0 when divided by all numbers up to
the square root of the number
{
prime = 1; //Number must be prime
}
}
return (number);
}
//key generation function called from menu.c
int gen_keys (void)
{
unsigned int p, q, e, n, r;
long d;
int error;
srand(time(NULL)); //randomise the random number generator
error = 1;
do //generate two different prime numbers
{
p = genprime();
q = genprime();
} while (q == p);
n = p * q; //n is the product of p and q
r = (p - 1) * (q - 1); //r is the totient of p and q
e = gencoprime(r); //e is coprime to r
d = gencongrel(e, r); //d is the multiplicative inverse of e mod r
if (d <= 0)
{
d = d + r; //d must be positive so calculate d + r to get d mod r
}
//Write the key files
FILE *fptr;
fptr = fopen("private_key.txt","w");
if (fptr != NULL) //check the file was opened correctly
{
fprintf(fptr,"%ld %d\n", d, n); //write the values
fflush(fptr);
fclose(fptr);
error = 0;
}
fptr = fopen("public_key.txt","w");
if ((fptr != NULL) || (error == 0)) //check the file was opened correctly

fprintf(fptr,"%d %d\n", e, n); //write the values out
fflush(fptr);
fclose(fptr);
error = 0;
}
else
{
error = 1;
}
if (error == 0)
{
printf("\nKEY GENERATION SUCCESSFULL\n\n\n"); //if there wasn't an
error
}
else
{
printf("\nERROR: KEY GENERATION UNSUCCESSFULL\n\n\n"); //if there was
an error
return(1);
}
return(0);
}

推荐答案

从这里开始:.NET代码转换 - 转换代码 [ ^ ]


您需要自己完成此操作。如果您遇到某个特定概念,请回来询问。
You'll need to do this on your own. If you get stuck on a specific concept please come back and ask.


这篇关于我想将用C编写的这段代码转换为C#的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆