| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 498 人关注过本帖
标题:RSA,对大整数的的处理~~
只看楼主 加入收藏
CLuck
Rank: 2
等 级:论坛游民
帖 子:23
专家分:17
注 册:2011-5-6
结帖率:100%
收藏
已结贴  问题点数:15 回复次数:3 
RSA,对大整数的的处理~~
本人目前在做课程设计,其中有一道题是RSA的实现,其实网上已经有很多相关文章了,但我想试着自己做一做。
    我的思路是:
1、随机得到一个1024位的二进制数,用数组a[32][32]存放。
2、判断如果a[0][0]等于0,则修改a[0][0]为1,这样能节省不少资源。
3、将得到的二进制数转换成十进制,然后进行素性判断,如果不是素数,则返回(1).
4、...(暂时就到这里,因为素性判断必定是一块硬骨头)
    我现在的问题是,因为数值太大,二进制转换成十进制该怎么处理,怎么存储这么大一个数(最高位是2^1023)?我想还是用数组来分组处理,但这样会很麻烦。大家有什么好的建议没?分享一下呗。
搜索更多相关主题的帖子: 二进制 硬骨头 十进制 
2012-05-18 15:32
a373339205
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:30
专家分:134
注 册:2011-6-9
收藏
得分:15 
回复 楼主 CLuck
一个unsigned int 可以存储32位,那么2^1024只需要32个顺序的unsigned int字节就可以表示,高位在前,低位在后

那么定义一个unsigned int num[32];//一共有1024位
那么再定义当前位的标志point=0;//指向这个数组的第0位;
那么第point位上的所在的字节是num数组中的第point>>5个字节;那么定义一个btye=num[point>>5];//表示第point位所在的字节
那么第point位所在的unsigned int的位是第0x8000>>(point&0x1f)位,那么定义一个bit=0x8000>>(point&0x1f);//表示第point位所在的字节的所在位
这个point的范围是0~1023,那么定义一个point_max=1024;
接下来我们只要能随即产生1024个0或者1,把他赋值给


unsigned int num[32];  // 用来存放2^1024次方
unsigned int point_max=1023 ;//
unsigned int point=0;//
unsigned int byte=num[point>>5];//point对应所在字节
unsigned int bit=(0x8000>>(point&0x1f));//point对应位的值
memset(num,0x00,sizeof(num));
for(point=0;point<point_max;point++)
{
    byte=num[point>>5];
    bit=(0x8000>>(point&0x1f));
    //随即产生0或者1
    if(产生1)
    {
        byte=byte|bit;
    }
}
那么这么结束后,num数组存在的内存顺序下来就是2^1024的二进制值




[ 本帖最后由 a373339205 于 2012-5-18 18:10 编辑 ]
2012-05-18 18:08
CLuck
Rank: 2
等 级:论坛游民
帖 子:23
专家分:17
注 册:2011-5-6
收藏
得分:0 
我想到了个方法,不用全部转换成十进制,只需将二进制的数每一位分别处理就行了。
2012-05-19 17:19
a373339205
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:30
专家分:134
注 册:2011-6-9
收藏
得分:0 
回复 3楼 CLuck
你这题的素数这块你要怎么处理?
2012-05-19 20:58
快速回复:RSA,对大整数的的处理~~
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.035587 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved