免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3005 | 回复: 9
打印 上一主题 下一主题

(用技术无关的方式解决了 不用进了)关于rsa算法破解的几个问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-10-27 11:12 |只看该作者 |倒序浏览
本帖最后由 houtinghua 于 2010-10-27 12:18 编辑

最近需要对一个500k-3m左右的文件进行加密,出于需求所以采用非对称加密所以选择了rsa算法,有几个地方没看明白所以想问问

1。如果我有了公钥推算出私钥的复杂度是多少。(因我看了产生钥匙的算法中就那么多质数,然后我随机出一个e1,那我可不可以顺着随机出e2呢?)

2。我想把私钥放到一个dll里面,里面还封装了解密的方法,有可能是linux,也有可能是win的平台,别人通过把dll加载到内存中,有没有可能看到私钥?有什么方法可以避免


从来没接触过这个加解密的东西,从csdn上找了个.c的文件,变量都是abc之类的,具体算法没看懂?所以我问的问题可能看不明白,见谅

还有就是我从baidu百科上看到的算法解释,有这么一句没看懂
/*
RSA的算法涉及三个参数,n、e1、e2。
  其中,n是两个大质数p、q的积,n的二进制表示时所占用的位数,就是所谓的密钥长度。
  e1和e2是一对相关的值,e1可以任意取,但要求e1与(p-1)*(q-1)互质;再选择e2,要求(e2*e1)mod((p-1)*(q-1))=1。
  (n及e1),(n及e2)就是密钥对。
*/

3。什么叫   n及e1   ,这个及是什么意思

谢谢

论坛徽章:
3
2015年迎新春徽章
日期:2015-03-04 09:56:11数据库技术版块每日发帖之星
日期:2016-08-03 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
2 [报告]
发表于 2010-10-27 11:22 |只看该作者
大数分解复杂度不低,至少目前以知的算法都超过位数的多项式级别.
私钥放到一个dll里面?OMG,这跟写一个txt文件告诉别人我的私钥是多少有什么区别?应当是应用的时候随机生成。
密钥对不密钥对的,我不抠字眼,
n和e2就是公钥
e1就是私钥
p,q可以在算完就丢掉

论坛徽章:
3
2015年迎新春徽章
日期:2015-03-04 09:56:11数据库技术版块每日发帖之星
日期:2016-08-03 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
3 [报告]
发表于 2010-10-27 11:27 |只看该作者
另外,如此大的数据量,绝对不建议你用非对称加密

论坛徽章:
0
4 [报告]
发表于 2010-10-27 11:36 |只看该作者
回复 3# cjaizss


    500k很大吗?抱歉我还没写测试程序呢,需求不在乎时间,给1分钟时间解密够吗?



回2楼

目前的需求是客户断往服务器传一个文件

也就是说每次客户端要上传得时候先要到服务器上请求一个public key? 不好意思我以为这个key一直可以用呢

论坛徽章:
0
5 [报告]
发表于 2010-10-27 11:38 |只看该作者
从网上找的代码,为什么加解密都需要n呢   ,也就是说我每次请求要给我2个数字?

  1. void  tencrypto(int e[MAX], int n[MAX])/*//对有需要的文件进行加密*/
  2. {
  3.    FILE *fp;
  4.     int i,k,count,temp,c;
  5.    char *filename,ch;
  6.    struct slink  *p,*p1,*p2;
  7.    struct slink  *h;
  8.    h=p=p1=p2=(struct slink * )malloc(LEN);
  9.    h=NULL;
  10.    printf("\n输入需要加密的文件路径 : ");
  11.    filename = "c:\\aa.jpg";
  12.    if((fp=fopen(filename,"r"))==NULL)
  13.    {
  14.            printf("Cannot open file !\n");
  15.            exit(0);
  16.    }
  17. printf("\n文件的原文内容:\n\n");
  18.    count=0;
  19.    while((ch=fgetc(fp))!=EOF)
  20.    {  
  21.            putchar(ch);
  22.        c=ch;
  23.        k=0;
  24.         if(c<0)
  25.         {
  26.                 c=abs(c);/*/把负数取正并且做一个标记*/
  27.                 p1->bignum[MAX-2]='0';
  28.         }
  29.         else
  30.         {
  31.                 p1->bignum[MAX-2]='1';
  32.         }

  33.         while(c/10!=0)
  34.         {
  35.                 temp=c%10;
  36.                 c=c/10;
  37.                 p1->bignum[k]=temp;
  38.                 k++;
  39.         }
  40.         p1->bignum[k]=c;
  41.     p1->bignum[MAX-1]=k+1;
  42.         count=count+1;
  43.         if(count==1)
  44.                 h=p1;
  45.         else p2->next=p1;
  46.         p2=p1;
  47.     p1=(struct slink * )malloc(LEN);
  48.         }
  49.     p2->next=NULL;
  50.     printf("\n");
  51.            fclose(fp);


  52.          filename ="encode";
  53.    fp=fopen(filename,"w");
  54.    p=p1=(struct slink * )malloc(LEN);
  55.    p=h;
  56.    printf("\n加密后文件中所形成密文:\n\n");
  57.    if(h!=NULL)
  58.         do
  59.         {
  60.                 expmod( p->bignum , e ,n ,p1->bignum);
  61.                 ch=p1->bignum[MAX-2];
  62.                 printf("%c",ch);
  63.             fputc(ch,fp);
  64.                 if ((p1->bignum[MAX-1]/10) ==0)/*/判断p1->bignum[99]的是否大于十;*/
  65.                 {
  66.                         ch=0+48;
  67.                         printf("%c",ch);
  68.                         fputc(ch,fp);
  69.                         ch=p1->bignum[MAX-1]+48;
  70.                         printf("%c",ch);
  71.                         fputc(ch,fp);
  72.                 }
  73.                 else
  74.                 {
  75.                         ch=p1->bignum[MAX-1]/10+48;
  76.             printf("%c",ch);
  77.                         fputc(ch,fp);
  78.                         ch=p1->bignum[MAX-1]%10+48;
  79.                         printf("%c",ch);
  80.                         fputc(ch,fp);
  81.                 }

  82.      for(i=0;i<p1->bignum[MAX-1];i++)
  83.      {
  84.                  printf("%d",p1->bignum[i]);
  85.          ch=p1->bignum[i]+48;
  86.              fputc(ch,fp);
  87.          }
  88.      p=p->next;
  89.          p1=(struct slink * )malloc(LEN);
  90.         }while(p!=NULL);
  91.         printf("\n\n");
  92.     fclose(fp);
  93.         return;
  94. }
复制代码

论坛徽章:
0
6 [报告]
发表于 2010-10-27 11:44 |只看该作者
直接用ssl不好吗???

论坛徽章:
0
7 [报告]
发表于 2010-10-27 12:09 |只看该作者
回复 6# JohnBull


    需求是必须声称本地文件。

论坛徽章:
0
8 [报告]
发表于 2010-10-27 12:17 |只看该作者
谢谢2位   需求改称内存生成文件  直接提交到服务器  不写本地文件了  谢谢

论坛徽章:
0
9 [报告]
发表于 2012-11-27 15:50 |只看该作者
我现在集中回复我以前发的SB帖子,我错了,我n年前太菜了,让大家见笑了



自以为聪明的楼主现在被这个加密的问题搞死了

论坛徽章:
15
射手座
日期:2014-11-29 19:22:4915-16赛季CBA联赛之青岛
日期:2017-11-17 13:20:09黑曼巴
日期:2017-07-13 19:13:4715-16赛季CBA联赛之四川
日期:2017-02-07 21:08:572015年亚冠纪念徽章
日期:2015-11-06 12:31:58每日论坛发贴之星
日期:2015-08-04 06:20:00程序设计版块每日发帖之星
日期:2015-08-04 06:20:00程序设计版块每日发帖之星
日期:2015-07-12 22:20:002015亚冠之浦和红钻
日期:2015-07-08 10:10:132015亚冠之大阪钢巴
日期:2015-06-29 11:21:122015亚冠之广州恒大
日期:2015-05-22 21:55:412015年亚洲杯之伊朗
日期:2015-04-10 16:28:25
10 [报告]
发表于 2012-11-30 16:25 |只看该作者
本帖最后由 yulihua49 于 2012-11-30 16:28 编辑
houtinghua 发表于 2010-10-27 11:12
最近需要对一个500k-3m左右的文件进行加密,出于需求所以采用非对称加密所以选择了rsa算法,有几个地方没看 ...

如果n和e1是公钥,n和e2就是私钥,反之也行。
通常,如果n和e1是公钥,e1常用3,65537,也可以是17,257。约定好了,可以不说了,告诉对方n就可以了。e2需要保密,不要给任何人。
对方用公钥就可以解密,无需私钥。
同时对方也可以用公钥加密,你可以私钥解密。因此一般情形,私钥不传输。

有限域啊,n是模数。要求被加密的数据,其数值不得大于n。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP