RSA加密

RSA是一种公开密钥加密(非对称密钥)。 RSA加密算法是最常用的非对称加密算法,CFCA在证书服务中离不了它。但是有不少新来的同事对它不太了解,恰好看到一本书中作者用实例对它进行了简化而生动的描述,使得高深的数学理论能够被容易地理解。我们经过整理和改写特别推荐给大家阅读,希望能够对时间紧张但是又想了解它的同事有所帮助。 RSA是第一个比较完善的公开密钥算法,它既能用于加密,也能用于数字签名。RSA以它的三个发明者Ron... Read More | Share it now!

AES加密

AES属于一种共有密钥加密(对称密码),旨在取代DES成为广泛使用的标准。 一、加密过程 二、数据结构 加密解密算法的输入是一个128位分组。这些分组被描述成4×4的字节方阵,这个分组被复制到state数组中,并在加密和解密的每一阶段都被修改。在字节方阵中,每一格都是一个字,包含了4字节。在矩阵中字是按列排序的。 加密由N轮构成,轮数依赖于密钥长度:16字节密钥对应10轮,24字节密钥对应12轮,32字节对应14轮。 三、加密解密的详细结构 AES未使用Feistel结构。其前N-1轮由4个不同的变换组成:字节代替、行移位、列混淆和轮密钥加。最后一轮仅包含三个变换。而在第一轮前面有一个起始的单变换(轮密钥加),可以视为0轮。   字节代替(SubBytes):用一个S盒完成分组的字节到字节的代替。   行移位(ShiftRows):一个简单的置换。   列混淆(MixColumns):利用域GF(28)上的算术特性的一个代替。   轮密钥加(AddRoundKey):当前分组和扩展密钥的一部分进行按位异或XOR。 首尾使用轮密钥加的理由:若将其他不需要密钥的阶段放在首尾,在不知道密钥的情况下就能计算其逆,这就不能增加算法的安全性。 加密原理:轮密钥加实际是一种Vernam密码形式,其本身不难被破解。另外三个阶段一起提供了混淆、扩散和非线性功能。这三个阶段没有涉及密钥,就它们自身而言,并未提供算法的安全性。然而,该算法经历一个分组的XOR加密(轮密钥加),再对该分组混淆扩散(其他三个阶段),再接着又是XOR加密,如此交替进行,这种方式非常有效非常安全。 可逆原理:每个阶段均可逆。对字节代替、行移位和列混淆,在解密算法中用它们相对应的逆函数。轮密钥加的逆就是用同样的轮密钥和分组相异或,其原理就是A⊕B⊕B... Read More | Share it now!

排列组合计算公式

排列的定义:从n个不同元素中,任取m(m≤n,m与n均为自然数,下同)个元素按照一定的顺序排成一列,叫做从n个不同元素中取出m个元素的一个排列;从n个不同元素中取出m(m≤n)个元素的所有排列的个数,叫做从n个不同元素中取出m个元素的排列数,用符号... Read More | Share it now!

Floyd

弗洛伊德(Floyd)算法是解决任意两点间的最短路径的一种算法,可以正确处理有向图或有向图负权(但不可存在负权回路)的最短路径问题,同时也被用于计算有向图的传递闭包。 通过Floyd计算图G=(V,E)中各个顶点的最短路径时,需要引入两个矩阵,矩阵S中的元素a表示顶点i(第i个顶点)到顶点j(第j个顶点)的距离。矩阵P中的元素b,表示顶点i到顶点j经过了b记录的值所表示的顶点。 假设图G中顶点个数为N,则需要对矩阵D和矩阵P进行N次更新。初始时,矩阵D中顶点a的距离为顶点i到顶点j的权值;如果i和j不相邻,则a=∞,矩阵P的值为顶点b的j的值。... Read More | Share it now!

Dijkstra

前言:Dijkstra最短路径算法是一种单源最短路径,针对的是非负权边。所谓单源最短路径就是指定一个出发顶点,计算从该源顶点出发到其他所有顶点的最短路径。 以顶点A作为出发点为例,来说明Dijkstra算法过程。 1、设置两个集合,S集合和U集合。S集合初始只有源顶点即顶点A,V集合初始为除了源顶点以外的其他所有顶点。 设置一个数组dist用来表示顶点A到其他顶点的最短距离,初始化为-1(表示无穷大)。 2、遍历集合V中与A直接相邻的顶点,找出当前与A距离最短的顶点。发现: A->C =... Read More | Share it now!

列举内部排序方法

排序分为内部排序和外部排序,外部排序在开发中用到的很少,因此这里只列举了内部排序方法。 插入排序:直接插入排序、折半插入排序、2-路插入排序、希尔排序 交换排序:冒泡排序、快速排序 选择排序:简单选择排序、树形选择排序、堆排序 归并排序:2-路归并排序 基数排序:链式基数排序 ... Read More | Share it now!