第二周作业
2014-04-13 21:14
423 查看
#include <_dbdao.h> #include <stdlib.h> #include <stdio.h> #include <time.h> #include <math.h> long n = 0; long t = 0; long e = 0; long d = 0; bool isPrime(long a); long CreateRandomInteger(int n); long CreateRandomPrime(int n); void CreatePublicKey(int p,int q); int CreateMutualPrime(long N); void CreatePrivateKey(void); int RSA_encrypting(int m); int Unlock_RSA_Encryption(int secret); int main(void){ CreatePublicKey(7,13); CreatePrivateKey(); int secret = RSA_encrypting(22); Unlock_RSA_Encryption(secret); return 0; } //判断是否是素数 bool isPrime(long a){ double max = sqrt(a); int index = 2; bool condition = (index <= max); do { if(a % index == 0){ return false; } else index += 1; }while(condition == true); return true; } // 随机生成长整数 long CreateRandomInteger(int n){ int max_result = pow(2,n); int min_result = pow(2,n-1); srand((unsigned)time(NULL)); long result = rand()%(max_result-min_result) + min_result; return result; } //2.3 随机生成一个长质数 long CreateRandomPrime(int n){ //得出2的(n-1)次方的范围,-1是为了后面+1防止结果为0 int max_result = (int) CreateRandomInteger(n-1) - 1; srand((unsigned)time(NULL)); //check代表判断是否是质数,result是随机数r*2-1产生的值 int check = 0; int result = 0; //如果result不是质数,则不断循环 do{ int r = rand() % max_result + 1; result = (r * 2) - 1; }while(isPrime(result)); return result; } //2.4公开密钥生成算法 void CreatePublicKey(int p,int q){ n = p*q; t = (p-1)*(q-1); e = CreateMutualPrime(t); printf("公钥< %d, %d> \n",n,e); } //生成互质数 int CreateMutualPrime(long N){ srand((unsigned)time(NULL)); int e = 0; do{ e = rand() % (N-1); e += 1; double max = sqrt(e); int index = 2; bool condition = index <= max; while(condition == true) { bool inner_condition = (N % index) == 0; if(inner_condition == true){ return e; } index += 1; } }while(true); } //保密钥匙生成算法 void CreatePrivateKey(void){ bool condition = ( (d * e) % t ) != 1; while(condition == true){ d += 1; } printf("私钥<%d, %d>", n, e); } //RSA加密 int RSA_encrypting(int m){ int secret = pow(m, e) % n; printf("加密信息是: %d \n",secret); return secret; } //RSA解密 int Unlock_RSA_Encryption(int secret){ int content = pow(secret, d) % n; printf("解密信息是:", content); return content; }
相关文章推荐
- Ubuntu配置hadoop的eclipse开发环境
- OpenCV编程->OpenMP优化入门
- Spring 出现Java.Lang.ClassNotFoundException: Org.Springframework.Transaction.TransactionException
- 杭电 2047阿牛的EOF牛肉串
- OpenCV编程->OpenMP优化入门
- 使用matlab进行频谱分析时若干问题解释
- MySQL Replication需要注意的问题
- 【monkeyrunner】
- wget 非递归下载
- nyoj 308 Substring
- Eclipse中配置的Tomcat无法访问
- 说不出SDK和IDE区别?进来吧兄弟
- HTML笔记——HTML 样式
- IOS 学习笔记(4) 控件 标签(UILabel)的使用方法
- android布局属性详解
- 计算几何概览
- jquery 初步了解
- 遗落的过往
- 第一周作业
- Win7旗舰版中的IIS配置asp.net的运行环境