算法
文章平均质量分 94
qmickecs
这个作者很懒,什么都没留下…
展开
-
RSA算法之原理篇
序言RSA算法是最早得到广泛应用的公钥加密算法。它在通信加密、签名认证等领域都起着重要作用。RSA算法最早由英国数学家Clifford Cocks在1973年发明,但由于当时被英国政府列为最高机密,直到死后不久其工作成果才被公布。而1977年,Ron Rivest、Adi Shamir 和 Leonard Adleman三人在MIT合作发表了一篇完整描述RSA算法的论文,被正式承认为该算法...原创 2016-05-15 10:57:56 · 8202 阅读 · 7 评论 -
离散对数和椭圆曲线加密原理
序言现代公钥加密系统中,常用的加密算法除了RSA还有离散对数加密和椭圆曲线加密。这两者原理比较相似,在这里一并介绍。离散对数问题我们在中学里学的对数问题是指, 给定正实数aaa和axaxa^x,求xxx。也就是计算x=logaaxx=logaaxx=\log_a{a^x}。这是实数域上的对数问题,不是什么难算的东西,随便按一下计算器结果就出来了。而离散对...原创 2017-08-03 11:35:05 · 22568 阅读 · 24 评论 -
RSA算法之实现篇(Python版)
RSA中的密钥长度指的是公钥的长度,目前主流的公钥长度为1024、2048以及4096位。由于已经有768位公钥被成功分解的先例,所以低于1024位的公钥都被认为是不安全的。而C++自带的基本类型远远无法满足RSA的运算需求,所以RSA算法的实现必须依赖于高精度整型运算。本文旨在介绍RSA算法的实现流程,不会对于涉及到的每一个算法进行深入介绍,如果需要进一步了解的可以参考本博客的其它相关文章。原创 2017-06-21 22:30:58 · 10049 阅读 · 3 评论 -
使用cuFFT实现大整数乘法
序言在某些场合,我们可能需要使用远超内置整型范围的整数进行运算,比如公钥加密等。如果使用最原始的竖式计算,那么时间复杂度是T(n^2),其中n是相乘的两个整数的位数。使用Karatsuba算法优化,时间复杂度可以降至T(n^{log_2 3})≈ T(n^1.585) 。而如果使用快速傅里叶变换(FFT),则可以优化到T(nlogn)原创 2017-08-23 17:53:59 · 2436 阅读 · 0 评论 -
勒索病毒工作原理
前些天借着Windows上的”永恒之蓝“漏洞,本来几乎快销声匿迹的加密勒索病毒又重新回到了公众视线里。由于电信等网络运营商早就封堵了可能导致中毒的445端口,所以外网影响不大,但是教育网里的同学就遭殃了,尤其是很多临毕业的学生纷纷中招,论文被加密,可能因此被迫延毕。本文尝试着还原这些勒索病毒中文件加解密的原理,来了解为什么这些病毒这么难缠,并给出一些“破解”的可能性,虽然条件都比较苛刻。原创 2017-05-22 13:48:12 · 27872 阅读 · 4 评论 -
红黑树原理简析
序言红黑树是一种应用十分广泛的平衡二叉搜索树。大部分语言和库中TreeMap的实现都是使用红黑树,还有Linux、Nginx等也使用了红黑树。 但是红黑树也是一种非常复杂的数据结构,为了保持平衡,在修改的时候必须进行维护操作,插入操作要分5种不同的情况来处理,而删除则有6种情况。 实际上,没有必要沉迷于这十几种情况不能自拔。多数时候,了解红黑树的原理和由来就足够了。因为实际应用中,几乎不可能有需原创 2017-07-15 17:21:36 · 1999 阅读 · 1 评论 -
STL实现细节之rotate()
STL中 rotate(first, middle, last) 函数的作用是原地把容器区间 [first, middle)(左半部分) 与 [middle, last) (右半部分)的元素互换。 它的实现充分利用了不同迭代器的特性进行算法优化,从而达到最优的性能原创 2017-04-26 19:45:37 · 2677 阅读 · 0 评论 -
关于斐波那契数列的一些总结
在程序员笔试面试中,经常碰到斐波那契数列计算的问题。网上已经有很多解释,本文打算进一步探讨其中可优化的空间原创 2017-04-22 16:44:44 · 10480 阅读 · 1 评论 -
谈谈有限域那些事儿
在本人的其它博文中,介绍了主流的三种公钥加密算法:RSA、离散对数加密和椭圆曲线加密。出于可读性上的考虑,文章中尽量减少了代数相关的描述。实际上,这三者都是基于有限域的,如果能从抽象代数角度去解释,会更简洁。原创 2017-08-17 23:12:31 · 18040 阅读 · 6 评论