• RSA加密算法


    在老师讲到RSA算法时写的,主要用于解题:

    #include <stdio.h>
    #include <windows.h>
    
    bool Prime(int t);        \判断传入的值是否是素数
    void D(int &d, int &z);        \计算出d的值
    void E(int &e, int d, int z);        \计算出e的值
    void K(int &k, int n);        \计算出k的值
    int Squ(int t);        \返回2的t次方
    
    int main(void)
    {
        int p, q;
        int n, z;
        int d;
        int e;
        int k;
    
        printf("请输入p和q(以空格号分隔):");
        scanf("%d %d", &p, &q);
        if(Prime(p)==NULL || Prime(q)==NULL)
        {
            printf("两个数中存在非素数!
    ");
            return 0;
        }
        
        n = p*q;
        z = (p - 1)*(q-1);
        printf("n=%d*%d=%d, z=(%d-1)*(%d-1)=%d
    ", p, q, n, p, q, z);
        D(d, z);
        printf("d=%d
    ", d);
        E(e, d, z);
        printf("e=%d
    ", e);
        printf("公钥:(%d,%d)
    私钥:(%d,%d)
    ", e, n, d, n);
        K(k, n);
        printf("k=%d
    ", k);
        printf("
    作者:方海峰
    BUG联系QQ:2579881587
    ");
    
        system("pause");
        return 0;
    }

    其他的自己写的函数:

    bool Prime(int t)
    {
    	int a = t / 2;
    	for(int b = 2; b <= a; ++b)
    	{
    		if(t%b==0)
    		{
    			return false;
    		}
    	}
    	return true;
    }
    void D(int &d, int &z)
    {
    	d = 5;
    	while(1)
    	{
    		for(int t = 2; t <= z; ++t)
    		{
    			if(d%t ==0 && z%t==0)
    			{
    				break;
    			}
    			if(t == z)
    			{
    				return ;
    			}
    		}
    		d += 2;
    	}
    }
    void E(int &e, int d, int z)
    {
    	for(int t = 1; 1; ++t)
    	{
    		if((t*z+1)%d==0)
    		{
    			e = (t*z+1)/d;
    			return;
    		}
    	}
    	return;
    }
    void K(int &k, int n)
    {
    	for(int t = 1; 1; ++t)
    	{
    		k = t;
    		if(Squ(t)>n)
    		{
    			return;
    		}
    	}
    
    	return;
    }
    int Squ(int t)
    {
    	int sum = 2;
    	for(int a = 0; a < t; ++a)
    	{
    		sum *= 2;
    	}
    
    	return sum;
    }
    

      

  • 相关阅读:
    php设计模式注册表模式
    zend studio
    java中模仿C++实现条件编译
    javascript去掉字符串空格——转
    领域模型谈实体对象和值对象
    面向对象语言的多分派、单分派、双重分派
    Java中Split函数的用法技巧
    web页面导出到Excel乱码解决
    在web项目中如何使用rdlc报表
    ASP.NET控件10个最有用的属性详解
  • 原文地址:https://www.cnblogs.com/2016Study/p/5406262.html
Copyright © 2020-2023  润新知