• 加密算法一览


    做了zip压缩的功能后,突然对背后的原理和算法想了解下,于是学习总结如下:

    具体的算法,可以先忽略,把每种算法的原理以及基本的数学知识先了解一遍,有兴趣的话,然后对每一种算法再详细学习和了解,甚至用程序去实现。

    MD5

    加密原理512位分组来处理输入的信息,且每一分组又被划分为16个32位子分组,经过了一系列的处理后,算法的输出由四个32位分组组成,将这四个32位分组级联后将生成一个128位散列值。

    大致算法步骤如下:

    1、补位

       M为原始数据,N表示分组数,M= N*512+448

    2、初始化MD缓存器

    A : 01 23 45 67

    B:  89 ab cd ef

    C:  fe dc ba 98

    D: 76 54 32 10

    3、数据处理

    4个非线性函数F、G、H、I

    RSA

    加密原理:利用了单向函数正向求解很简单,反向求解很复杂的特性

    对两个质数相乘容易,而将其合数分解很难的特点进行加密算法。N=p1*p2,已知p1、p2求n简单,已知n求p1、p2困难

    (m^e)mod n=c,已知m、e、n求c简单,已知e、n、c求m很难

     

    算法中用到的数学知识:

     2.1 关于互质关系

     

    如果两个正整数,除了1以外,没有其他公因数,我们就称这两个数是互质关系

    2.2 欧拉函数Φ(n)

    任意给定正整数n,请问在小于等于n的正整数之中,有多少个与n构成互质关系?

    计算这个值的方式叫做欧拉函数,使用Φ(n)表示

     

    2.3 欧拉定理

    如果两个正整数m和n互质,那么m的φ(n)次方减去1,可以被n整除。

     

    2.4 费马小定理

    欧拉定理的特殊情况:如果两个正整数m和n互质,而且n为质数!那么φ(n)结果就是n-1。
    那么也就是:

     

    以上都是一些数学知识,作为理解算法的铺垫。

     

    DES

    DES密钥长度为56位,在形式上是一个64位数。DES以64位(8字节)为分组对数据加密,每64位明文,经过16轮置换生成64位密文,其中每字节有1位用于奇偶校验,所以实际有效密钥长度是56位。3DES可提供更高的安全性,但相应地,计算速度更慢。

     

    算法描述:

    1)输入64位明文数据,并进行初始置换IP;

    2)在初始置换IP后,明文数据再被分为左右两部分,每部分32位,以L0,R0表示;

    3) 在秘钥的控制下,经过16轮运算(f);

    4) 16轮后,左、右两部分交换,并连接再一起,再进行逆置换;

    5) 输出64位密文。

     

    AES

    AES加密过程是在一个4×4的字节矩阵上运作,这个矩阵又称为state)”,其初值就是一个明文区块算法过程中涉及到S盒变换、行变换、列变换等

    备注:数学知识-矩阵,算法会经过多轮处理,如下图所示:

     

    ECC

    什么是ECC
    ECC是Elliptic Curve Cryptography(椭圆曲线密码学)的缩写,是一种基于椭圆曲线数学的公开密钥加密算法,其本质是利用离散对数问题实现加密。

    什么是椭圆曲线
    Wolfram MathWorld(线上数学百科全书,http://mathworld.wolfram.com 给出了非常精准的定义:
    一条椭圆曲线就是一组被 y^2 = x^3 + ax + b 定义的且满足 4a^3 + 27b^2 ≠ 0 的点集。
    4a^3 + 27b^2 ≠ 0 这个限定条件是为了保证曲线不包含奇点(在数学中是指曲线上任意一点都存在切线)。
    椭圆曲线示例图:

     

     

    不同的椭圆曲线对应不同的形状(b=1,a从2到-3)

     

    阿贝尔群

    阿贝尔群的概念是抽象代数的基本概念之一,是一种代数结构,由一个集合以及一个二元运算所组成。
    如果一个集合或者运算是群的话,就必须满足以下条件(+ 表示二元运算):
    1、封闭性(closure),如果a和b被包含于群,那么a+b也一定是群的元素;
    2、结合律(associativity);
    3、存在一个单位元(identity element)0,0与任意元素运算不改变其值的元素,即 a+0 = 0+a = a;
    4、每个元素都存在一个逆元(inverse);
    5、交换律(commutativity),即 a+b = b+a;

    好了,数学知识铺垫到这。

    我在这里抛砖引玉,做大概介绍,算法与数学关系太强了,用oop的思想来说,就是耦合度太高。因为很多算法,就是数学家在一起研究出来的。普通的同学,可能对数学知识望而却步,包括我在内。所以,一开始,我们没有必要完全搞清楚,先了解,然后慢慢泡,泡久了,就熟悉了,最后做到理解。只有理解了,后面才可能会应用好。

     

  • 相关阅读:
    LINQ学习笔记(4) 扩展方法
    LINQ学习笔记(2) 匿名类型
    jQuery选择器总结
    C#3.0学习笔记(9)转换
    C#3.0学习笔记(11)枚举数和foreach语句实现原理
    C#3.0学习笔记(7)浅谈委托
    C#3.0学习笔记(10)泛型
    中亚网络面试总结
    C#3.0学习笔记(8)浅谈接口interface
    通过VS2010的内存分析工具来分析程序性能问题
  • 原文地址:https://www.cnblogs.com/wangqiang3311/p/14932297.html
Copyright © 2020-2023  润新知