求助!!请高手们帮忙把下面的这段C代码改写成相应的C#代码!谢谢!!
来源:互联网 发布:spss22如何保存数据 编辑:程序博客网 时间:2024/05/17 22:14
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#define mpi_swap(p, q) /
(p) = (p) + (q); /
(q) = (p) - (q); /
(p) = (p) - (q)
typedef long long *MPI;
typedef struct {
MPI n; /* modulus */
MPI e; /* exponent */
} RSA_public_key;
typedef struct {
MPI n; /* public modulus */
MPI e; /* public exponent */
MPI d; /* exponent */
MPI p; /* prime p. */
MPI q; /* prime q. */
MPI u; /* inverse of p mod q. */
} RSA_secret_key;
void
mpi_gcd( MPI *g, MPI xa, MPI xb )
{
MPI a = (MPI)malloc(sizeof(long long));
MPI b = (MPI)malloc(sizeof(long long));
*a = *xa;
*b = *xb;
while(*b > 0) {
*(*g) = (*a) % (*b);
(*a) = (*b);
(*b) = *(*g);
}
*g = a;
}
void
mpi_invm( MPI *x, MPI a, MPI n )
{
MPI u = (MPI)malloc(sizeof(long long));
MPI v = (MPI)malloc(sizeof(long long));
MPI u1, u2, u3, v1, v2, v3, q, t1, t2, t3;
*u = *a;
*v = *n;
u1 = (MPI)malloc(sizeof(long long));
*u1 = 1;
u2 = (MPI)malloc(sizeof(long long));
*u2 = 0;
u3 = v;
v1 = (MPI)malloc(sizeof(long long));
*v1 = 0;
v2 = (MPI)malloc(sizeof(long long));
*v2 = 1;
v3 = u;
q = (MPI)malloc(sizeof(long long));
t1 = (MPI)malloc(sizeof(long long));
t2 = (MPI)malloc(sizeof(long long));
t3 = (MPI)malloc(sizeof(long long));
while( (*v3) != 1) {
(*q) = (*u3) / (*v3);
(*t1) = (*v1) * (*q);
(*t2) = (*v2) * (*q);
(*t3) = (*v3) * (*q);
(*t1) = (*u1) - (*t1);
(*t2) = (*u2) - (*t2);
(*t3) = (*u3) - (*t3);
(*u1) = (*v1);
(*u2) = (*v2);
(*u3) = (*v3);
(*v1) = (*t1);
(*v2) = (*t2);
(*v3) = (*t3);
printf("u1 = %lld/tu2 = %lld/tu3 = %lld/nv1 = %lld/tv2 = %lld/tv3 = %lld/n/n", (*u1), (*u2), (*u3), (*v1), (*v2), (*v3));
}
*(*x) = (*v2)+(*n);
}
void generate( RSA_secret_key *sk)
{
MPI p = (MPI)malloc(sizeof(long long));
MPI q = (MPI)malloc(sizeof(long long)); /* the two primes */
MPI d = (MPI)malloc(sizeof(long long)); /* the private key */
MPI u = (MPI)malloc(sizeof(long long));
MPI t1 = (MPI)malloc(sizeof(long long)), t2 = (MPI)malloc(sizeof(long long));
MPI n = (MPI)malloc(sizeof(long long)); /* the public key */
MPI e = (MPI)malloc(sizeof(long long)); /* the exponent */
MPI phi = (MPI)malloc(sizeof(long long)); /* helper: (p-1)(q-1) */
MPI g = (MPI)malloc(sizeof(long long));
MPI f = (MPI)malloc(sizeof(long long));
*p = *q = 0;
/* select two (very secret) primes */
printf("/n====== INPUT ======/n");
printf("Both p and q should be/nless than 65536/np should be less than or equal to q/n");
printf("p = ");
scanf("%lld", p);
printf("q = ");
scanf("%lld", q);
/* calculate the modulus */
(*n) = (*p) * (*q);
(*t1) = (*p) - 1;
(*t2) = (*q) - 1;
(*phi) = (*t1) * (*t2);
mpi_gcd(&g, t1, t2);
(*f) = (*phi) / (*q);
(*e) = 13;
do{ mpi_gcd(&t1, e, f);
if((*t1) != 1 ) /* (while gcd is not 1) */
(*e) += 2;
else
break;
}while(1);
mpi_invm(&d, e, phi );
u = (MPI)malloc(sizeof(long long));
mpi_invm(&u, p, q );
sk->n = n;
sk->e = e;
sk->p = p;
sk->q = q;
sk->d = d;
sk->u = u;
}
void
public_f(RSA_public_key *pkey )
{
MPI output = (MPI)malloc(sizeof(long long));
double tmp = pow(5.000000,(double)(*(pkey->e)));
*output = (long long)tmp % (*(pkey->n));
printf("output = %lld/n", *output);
}
int main()
{
int i;
RSA_secret_key *sk = (RSA_secret_key *)malloc(sizeof(RSA_secret_key));
generate( sk);
RSA_public_key *pkey = (RSA_public_key *)malloc(sizeof(RSA_public_key));
pkey->e = sk->e;
pkey->n = sk->n;
//public_f(pkey);
printf("n = %lld/n",*(sk->n));
printf("e = %lld/n",*(sk->e));
printf("p = %lld/n",*(sk->p));
printf("q = %lld/n",*(sk->q));
printf("d = %lld/n",*(sk->d));
printf("u = %lld/n",*(sk->u));
long long P,C;
printf("input a ming wen:");
scanf("%lld",&P);
C=P;
for(i=1;i<(*(sk->e));i++)
{
C=((C%(*(sk->n)))*(P%(*(sk->n))))%(*(sk->n));
}
//C=(long long)pow(1.000000,(double)(*(sk->e))) % (*(sk->n));
printf("mi wen:%lld/n",C);
P=C;
for(i=1;i<(*(sk->d));i++)
{
P=((P%(*(sk->n)))*(C%(*(sk->n))))%(*(sk->n));
}
//P=(long long)pow((double)C,(double)(*(sk->d))) % (*(sk->n));
printf("ming wen:%lld",P);
return 0;
}
- 求助!!请高手们帮忙把下面的这段C代码改写成相应的C#代码!谢谢!!
- 蓝牙问题。请真正的c#高手帮忙?谢谢
- 请帮忙解答,十分谢谢。下面的C++代码的宏定义是什么意思?
- 请高手务必帮忙,关于JAVA的一段代码!!!谢谢了
- 想请高手帮忙把VB代码改成Obj-C代码
- 怎样用下面C语言代码实现直接对数据加密,不用写文件的方式。求助大神帮忙改改!
- c++的高手们 谢谢帮帮忙 [求助!!!!!!!!!!!!!]
- 求助!急!谁能帮我看一下,下面的代码有什么问题。谢谢
- 大家帮忙看看下面的代码
- 请朋友帮忙优化一下下面的代码,降低其时间复杂度。。。
- [VB.NET]帮忙把下面这段web的程序改成vb.net
- win tc的一个完整代码,编译正确,但黑屏,请高手帮忙指导你一下!!!
- C#编写的这段代码运行不出来,帮忙看看是哪里有错?感激不尽。。。
- 如何在特定的区域提问?请哪位高手帮忙指点一下,谢谢!
- 自己写的一个数据访问类,请高手帮忙看看!谢谢!
- 为什么C++里所有类型的变量都一整型输出???请高手帮忙, 谢谢啦!!!!
- 请帮忙看看这段代码有什么问题??(这是我在网上搜的)
- 求助高手,帮忙编一个只用加法和单循环,计算出不超过n的三次方根的整数的算法。谢谢!!
- ms sql 时间函数
- Linux下SVN配置
- FF IE 盒子模型
- Linux下计划任务cron使用方法
- UIWebView和UIScrollView上接受touch事件
- 求助!!请高手们帮忙把下面的这段C代码改写成相应的C#代码!谢谢!!
- phpMyAdmin 登陆超时(1440秒未活动),请重新登录问题
- ABAP基础知识学习(一)
- Java MyEclipse 快捷键
- hdu3546 Calculator
- ABAP基础知识学习(二)
- 如何成为一名优秀的程序员
- XDS510与XDS560的区别
- 图片裁剪