开发者社区> 问答> 正文

求RSA密码的C语言实现算法的源程序(可通过运行)(1024位的)

包括密钥算法发邮件给我也行

展开
收起
知与谁同 2018-07-16 14:07:14 4114 0
1 条回答
写回答
取消 提交回答
  • 云栖社区聚能聊、问答管理员~发福利、搞怪,八卦我来,论技术、发话题、写博客你上!
    加密的时候,输入Y,然后输入要加密的文本(大写字母)
    解密的时候,输入N,然后输入一个整数n表示密文的个数,然后n个整数表示加密时候得到的密文。
    /*RSA algorithm */
    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    #define MM 7081
    #define KK 1789
    #define PHIM 6912
    #define PP 85
    typedef char strtype[10000];
    int len;
    long nume[10000];
    int change[126];
    char antichange[37];

    void initialize()
    { int i;
    char c;
    for (i = 11, c = 'A'; c <= 'Z'; c ++, i ++)
    { change[c] = i;
    antichange[i] = c;
    }
    }
    void changetonum(strtype str)
    { int l = strlen(str), i;
    len = 0;
    memset(nume, 0, sizeof(nume));
    for (i = 0; i < l; i ++)
    { nume[len] = nume[len] * 100 + change[str[i]];
    if (i % 2 == 1) len ++;
    }
    if (i % 2 != 0) len ++;
    }
    long binamod(long numb, long k)
    { if (k == 0) return 1;
    long curr = binamod (numb, k / 2);
    if (k % 2 == 0)
    return curr * curr % MM;
    else return (curr * curr) % MM * numb % MM;
    }
    long encode(long numb)
    { return binamod(numb, KK);
    }
    long decode(long numb)
    { return binamod(numb, PP);
    }
    main()
    { strtype str;
    int i, a1, a2;
    long curr;
    initialize();
    puts("Input 'Y' if encoding, otherwise input 'N':");
    gets(str);
    if (str[0] == 'Y')
    { gets(str);
    changetonum(str);
    printf("encoded: ");
    for (i = 0; i < len; i ++)
    { if (i) putchar('-');
    printf(" %ld ", encode(nume[i]));
    }
    putchar('\n');
    }
    else
    { scanf("%d", &len);
    for (i = 0; i < len; i ++)
    { scanf("%ld", &curr);
    curr = decode(curr);
    a1 = curr / 100;
    a2 = curr % 100;
    printf("decoded: ");
    if (a1 != 0) putchar(antichange[a1]);
    if (a2 != 0) putchar(antichange[a2]);
    }
    putchar('\n');
    }
    putchar('\n');
    system("PAUSE");
    return 0;
    }
    测试:
    输入:
    Y
    FERMAT
    输出:
    encoded: 5192 - 2604 - 4222
    输入
    N
    3 5192 2604 4222
    输出
    decoded: FERMAT
    2019-07-17 22:56:46
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
数据+算法定义新世界 立即下载
袋鼠云基于实时计算的反黄牛算法 立即下载
Alink:基于Apache Flink的算法平台 立即下载