首页
社区
课程
招聘
[原创]我写的大整数和素域运算库
发表于: 2007-9-5 19:44 11355

[原创]我写的大整数和素域运算库

2007-9-5 19:44
11355

好久没有来发贴了,下面这个是我暑期实习作的东西,用了汇编优化,效率比较高,所以就放出来了,用处很明显,可以实现相关密码算法,如RSA。
Blog原文:
f37K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4N6%4N6#2)9J5k6h3y4K6K9%4y4G2k6Y4c8Q4x3X3g2F1k6i4c8Q4x3V1k6T1L8r3!0Y4i4K6u0r3M7r3!0K6N6q4)9J5c8V1y4A6M7r3g2J5e0r3W2T1i4K6g2X3M7X3g2D9k6h3q4K6k6g2)9J5k6h3S2@1L8h3H3`.
代码/DEMO/文档/Benchmark程序:
443k6Y4c8H3i4K6y4m8i4K6u0r3i4K6u0r3c8W2c8b7i4K6g2X3g2X3W2K6K9i4c8G2M7W2)9K6b7i4k6A6M7$3W2@1L8%4u0Q4y4o6m8X3N6s2m8Q4x3X3g2U0M7$3E0K6L8$3k6@1i4K6u0W2L8X3g2@1i4K6u0r3f1s2g2T1L8r3W2U0i4K6u0r3f1s2u0G2k6s2g2U0N6s2y4Q4x3V1k6U0L8$3c8W2i4K6g2X3j5h3&6V1i4K6g2X3L8r3W2T1i4K6u0r3b7$3W2H3k6i4u0x3K9h3u0Q4y4h3k6J5k6h3I4W2j5i4y4W2i4K6g2X3j5Y4W2Q4y4h3k6U0M7$3E0Q4x3X3g2J5j5i4t1`.

教育网:024k6Y4c8H3i4K6y4m8i4K6u0r3i4K6u0r3k6%4u0W2j5i4c8Q4y4h3k6U0M7$3E0Q4x3@1q4H3N6h3u0D9K9h3y4Q4y4o6m8H3N6h3u0D9K9h3y4Q4x3X3g2K6K9Y4c8#2i4K6u0W2k6h3c8#2i4K6u0W2j5$3&6Q4x3V1k6H3N6h3u0D9K9h3y4Q4x3X3c8X3K9h3I4W2M7#2)9J5c8V1y4A6M7r3g2J5e0r3W2T1i4K6g2X3M7X3g2D9k6h3q4K6k6g2)9#2k6X3u0&6i4K6g2X3j5%4y4C8i4K6u0W2M7X3q4J5

------------------------------------------------------------------------------
CipherLib是一个使用C++和汇编代码实现的用于多精度大整数运算和密码学领域素域基本运算的函数库。由陈士凯(CSK)开发。
这个函数库实现的操作有:


  • 支持任意精度的大整数:精度可以通过代码设定,支持符号数 
  • 对大整数的四则运算和求模运算,以及2进制化的移位操作 
  • 使用类将大整数加以封装,支持直接用传统运算符进行大整数的运算代码编写 
  • 支持从文本串和系统内置整型数据中读取大整数,支持将大整数输出为2进制、8进制、10进制和16进制文本串 

  • [培训]科锐逆向工程师培训第53期2025年7月8日开班!

    收藏
    免费 7
    支持
    分享
    最新回复 (13)
    雪    币: 58782
    活跃值: (21915)
    能力值: (RANK:350 )
    在线值:
    发帖
    回帖
    粉丝
    2
    没测试,纯支持一下,期待完善。;)
    2007-9-5 20:15
    0
    雪    币: 236
    活跃值: (35)
    能力值: ( LV9,RANK:170 )
    在线值:
    发帖
    回帖
    粉丝
    3
    呵呵,多谢老大支持。
    效率上市没有问题的,基本的运算我也大体测试过了。毕竟今后实验室要用这个做进一步算法实现
    不过可能会有一些小bug在
    2007-9-5 20:22
    0
    雪    币: 6075
    活跃值: (2236)
    能力值: (RANK:1060 )
    在线值:
    发帖
    回帖
    粉丝
    4
    蒙哥xx的好一些?
    2007-9-5 21:04
    0
    雪    币: 236
    活跃值: (35)
    能力值: ( LV9,RANK:170 )
    在线值:
    发帖
    回帖
    粉丝
    5
    素性验证时候要求A^n (mod m)其中n是小整数,用窗口法就是杀鸡用牛刀,慢在这里
    2007-9-5 21:10
    0
    雪    币: 721
    活跃值: (350)
    能力值: ( LV9,RANK:1250 )
    在线值:
    发帖
    回帖
    粉丝
    6
    这个一定要支持。
    2007-9-5 21:13
    0
    雪    币: 721
    活跃值: (350)
    能力值: ( LV9,RANK:1250 )
    在线值:
    发帖
    回帖
    粉丝
    7
    发现这么句话:“国内著名破解组织看雪论坛”
    呵呵
    2007-9-5 21:31
    0
    雪    币: 178
    活跃值: (10)
    能力值: ( LV2,RANK:10 )
    在线值:
    发帖
    回帖
    粉丝
    8
    楼上的那句话不够味儿啊
    2007-9-5 21:54
    0
    雪    币: 538
    活跃值: (675)
    能力值: ( LV9,RANK:290 )
    在线值:
    发帖
    回帖
    粉丝
    9
    支持一下。。。
    2007-9-5 22:38
    0
    雪    币: 200
    活跃值: (10)
    能力值: ( LV2,RANK:10 )
    在线值:
    发帖
    回帖
    粉丝
    10
    不错,支持下,赞一个
    2007-9-5 23:32
    0
    雪    币: 107
    活跃值: (11)
    能力值: ( LV4,RANK:50 )
    在线值:
    发帖
    回帖
    粉丝
    11
    赞一下大三的小学弟~
    2007-9-5 23:44
    0
    雪    币: 11705
    活跃值: (975)
    能力值: ( LV12,RANK:779 )
    在线值:
    发帖
    回帖
    粉丝
    12
    timeGetTime(),GetTickCount(),返回值的单位是ms,但实际上它的精度只有10ms左右。
    所以就有0ms这样的值出来了。

    QueryPerformanceCounter()采用3.579545MHZ计时器,精度能达到us.
    rdtsc取CPU内部time stamp counter,精度是ns级的。
    你可以实测一下两段代码消耗的cpu周期数。

    // Win32, C++ return an int64, is EDX:EAX
    // rdtsc: 0F31
    __inline unsigned __int64 cput_64bit(void)
    {
       __asm _emit 0x0F
       __asm _emit 0x31
    }

    uint64 cpucnt_now;
    CRITICAL_SECTION  g_critical_cpu_cnt;

    InitializeCriticalSection(&g_critical_cpu_cnt);
    EnterCriticalSection(&g_critical_cpu_cnt);
    cpucnt_now = cput_64bit();
    // 待测代码段
    cpucnt_now = cput_64bit() - cpucnt_now;
    LeaveCriticalSection(&g_critical_cpu_cnt);
    2007-9-10 14:48
    0
    雪    币: 236
    活跃值: (35)
    能力值: ( LV9,RANK:170 )
    在线值:
    发帖
    回帖
    粉丝
    13
    恩,这个问题当时因为只是想做验证性的测试所以就偷懒用timeGetTime()了。rdtsc其实也会因为windows线程调度造成不精确。
    对于比较精确的benchmark还是需要列出histogram

    给的代码不错,收藏了^_^
    2007-9-10 18:20
    0
    雪    币: 11705
    活跃值: (975)
    能力值: ( LV12,RANK:779 )
    在线值:
    发帖
    回帖
    粉丝
    14
    函数不要太长就是,一般是没有问题的。1ms已经可以跑百万个时钟周期了。
    长时间的性能比较,超过10ms被切换,直接加减时间的方法都不行了。则要用统计线程时间来算了。

    那段是我计算CPU主频的一段代码。比如说
    QueryPerformanceCounter() 消耗时钟周期;
    每次是有变化的 6000-8000不等。多次测试就OK了。
    2007-9-10 18:44
    0
    游客
    登录 | 注册 方可回帖
    返回