会员
周边
众包
新闻
博问
闪存
赞助商
所有博客
当前博客
我的博客
我的园子
账号设置
简洁模式
...
退出登录
注册
登录
Starrybird's blog
博客园
|
首页
|
新随笔
|
新文章
|
联系
|
订阅
|
管理
2015年5月9日
大整数算法[13] 单数位乘法
摘要: ★ 引子 最近在折腾 wxWidgets,同时拖延症又犯了,所以中断了好久。这次来讲讲单数位乘法,前面讲到 Comba 和 Karatsuba 乘法,这两个算法适合用来处理比较大的整数,但是对于一个大整数和一个单精度数相乘,其效果反而会不好,因为计算量过多。实际上单数位乘法只是基线乘法的一个特例...
阅读全文
posted @ 2015-05-09 19:01 starrybird
阅读(1922)
评论(2)
推荐(1)
编辑
2015年4月23日
大整数算法[12] 有符号乘法
摘要: ★ 引子 前面三篇文章讲了 Comba 乘法和 Karatsuba 乘法,有了这两个算法,就可以很轻松的构造有符号数乘法。 顺便提一下:讲 Comba 乘法的实现的时候,给出了 x86 环境下的内联汇编实现,最近添加了 GCC x64 环境的内联汇编,已经补充到帖子当中。★ 实现 有符号数的乘法...
阅读全文
posted @ 2015-04-23 21:01 starrybird
阅读(2152)
评论(0)
推荐(0)
编辑
2015年4月21日
大整数算法[11] Karatsuba乘法
摘要: ★ 引子 前面两篇介绍了 Comba 乘法,最后提到当输入的规模很大时,所需的计算时间会急剧增长,因为 Comba 乘法的时间复杂度仍然是 O(n^2)。想要打破乘法中 O(n^2) 的限制,需要从一个完全不同的角度来看待乘法。在下面的乘法算法中,需要使用 x 和 y 这两个大整数的多项式基表达式...
阅读全文
posted @ 2015-04-21 21:41 starrybird
阅读(10012)
评论(0)
推荐(0)
编辑
2015年4月20日
大整数算法[10] Comba乘法(实现)
摘要: ★ 引子 上一篇文章讲了 Comba 乘法的原理,这次来讲讲如何实现。为了方便移植和充分发挥不同平台下的性能,暂时用了三种不同的实现方式: 1、单双精度变量都有的情况。 2、只有单精度变量的情况。 3、可以使用内联汇编的情况。 前面已经介绍了 Comba 乘法的原理和实现思路,为了方便,再把它贴...
阅读全文
posted @ 2015-04-20 20:15 starrybird
阅读(2032)
评论(0)
推荐(1)
编辑
2015年4月12日
大整数算法[09] Comba乘法(原理)
摘要: ★ 引子 原本打算一篇文章讲完,后来发现篇幅会很大,所以拆成两部分,先讲原理,再讲实现。实现的话相对复杂,要用到内联汇编,要考虑不同平台等等。 在大整数计算中,乘法是非常重要的,因为在公钥密码学中模幂运算要频繁使用乘法,所以乘法的性能会直接影响到模幂运算的效率。下面将会介绍两种乘法:基线乘法和 C...
阅读全文
posted @ 2015-04-12 18:37 starrybird
阅读(5721)
评论(0)
推荐(1)
编辑
2015年4月11日
Andriod手势密码破解
摘要: ★ 引子 之前在Freebuf上看到一片文章讲Andriod的手势密码加密原理,觉得比较有意思,所以就写了一个小程序试试。 ★ 原理 Android的手势密码加密原理很简单: 先给屏幕上的每一个点编号(一般是 3 X 3): 00,01,02 03,04,05 06,07,08 注意这...
阅读全文
posted @ 2015-04-11 21:24 starrybird
阅读(6147)
评论(0)
推荐(1)
编辑
2015年4月8日
大整数算法[08] 有符号加法和减法
摘要: ★ 引子 前面几篇文章介绍了比较操作,绝对值加法和绝对值减法,现在就可以利用这几个算法构建有符号数的加减算法。 ★ 有符号数加法 有符号数的加法分成两种情况:同号和异号。 1. 如果两个数同号,则执行绝对值加法,如果两个数为非负数,则结果为非负数;如果两个数都是负数,则结果也为负数。...
阅读全文
posted @ 2015-04-08 12:45 starrybird
阅读(2460)
评论(6)
推荐(0)
编辑
2015年4月7日
大整数算法[07] 绝对值减法
摘要: ★ 引子 最近两个星期一直在折腾,主机从 Windows 换到了 Linux,工作环境从实体机转移到虚拟机中。当然目的只有一个,那就是充分发挥 Linux 和虚拟机的优势来提高自己的工作效率。俗话说得好:磨刀不误砍柴工,花费一些时间来折腾升级还是有必要的,有空的话可以聊聊相关经验,如果你想急于...
阅读全文
posted @ 2015-04-07 22:50 starrybird
阅读(2009)
评论(0)
推荐(0)
编辑
2015年3月23日
大整数算法[06] 绝对值加法
摘要: 上一篇文章简单讲解了移位操作是如何进行的,最后简要分析了算法时间复杂度。这次介绍绝对值加法,这个算法是构建有符号数加法减法的重要模块之一。绝对值计算的算法是高度优化的,本身的时间复杂度为 O(n),但是如果被高级的算法调用,其复杂度很容易被提高到 O(n^2) 甚至 O(n^3)。绝对值加法只计算...
阅读全文
posted @ 2015-03-23 14:04 starrybird
阅读(2001)
评论(0)
推荐(0)
编辑
2015年3月22日
大整数算法[05] 移位操作
摘要: 上一篇博文讲到了大整数位的相关操作,这次的内容依然和位的操作相关:移位操作。需要说明的是,这里所讲的大整数移位操作都是算术移位(左移的话精度会增加,而不是把移出的位丢掉)。 ★ 两种移位的区别 在移位操作当中存在两种不同的操作方式:逻辑移位和算术移位。在逻辑移位当中,移出的位丢失,移入的位取 0...
阅读全文
posted @ 2015-03-22 15:49 starrybird
阅读(2473)
评论(1)
推荐(1)
编辑
2015年3月21日
大整数算法[04] 位操作
摘要: 上一篇文章介绍了大整数的比较操作,今天来谈谈和位相关的操作。 ★ 引子 在大整数的表示和相关定义这篇文章中讲到了大整数是如何表示的。为了方便后面的讲解,这里先按照前面的定义,给出一个大整数的例子(32位系统下,每一个数位长度为32比特): 假设有一 bignum x,十进制值为 11349246...
阅读全文
posted @ 2015-03-21 15:16 starrybird
阅读(1443)
评论(0)
推荐(0)
编辑
2015年3月20日
大整数算法[03] 比较操作
摘要: 上一篇博文简单谈了大整数算法的一些最基本操作,接下来要介绍一些相对高级一点点的操作:比较操作。比较操作分成三种:绝对值比较,有符号数比较,多精度数和单精度数比较。 约定:所有的比较操作,如果 x > y,返回 1;x == y,返回 0;x used > y->used) return 1...
阅读全文
posted @ 2015-03-20 21:58 starrybird
阅读(1053)
评论(0)
推荐(0)
编辑
大整数算法[02] 基本的操作(维护算法)
摘要: 上一篇博文简单介绍了大整数的表示方法,这次开始介绍一些基本的算法。 ★ 初始化和清除 编写大整数函数的出发点是bignum结构的初始化和清除,在其他大部分算法当中,这两个算法都会用到。 对于给定的bignum结构,初始化有两种情况:一是仅仅把bignum结构的dp指向NULL,二是初始化的时候顺便...
阅读全文
posted @ 2015-03-20 14:27 starrybird
阅读(1239)
评论(0)
推荐(0)
编辑
2015年3月19日
大整数算法[01] 大整数的表示和相关定义
摘要: ★ 相关的数据类型定义 在干正事之前,先定义好各种数据类型还是很有必要的,避免在以后的编码中引起混乱。 uintX X位无符号整形,如uint32表示32位无符号整形 intX X位有符号整形,如int32表示32位有符号整形 基本数据类型定义: #ifdef _MSC_VER t...
阅读全文
posted @ 2015-03-19 23:20 starrybird
阅读(5542)
评论(0)
推荐(0)
编辑
大整数算法[00] 概述
摘要: ★ 为啥要做这个 早在大一的时候,我便对密码学产生兴趣。那时在计算机导论后面看到RSA加密的计算原理,觉得十分有趣,于是就很想自己实现一个RSA加密,不过我很快就放弃了,因为实在搞不定那超长的整数计算。C里面最长的整数类型也就64位,对于动辄就1024位的RSA密钥,这连个零头都没有。为了完成这个...
阅读全文
posted @ 2015-03-19 23:19 starrybird
阅读(2918)
评论(0)
推荐(3)
编辑
公告