zoukankan      html  css  js  c++  java
  • 几种加密算法概述

    这次面试被问到密码学,问到MD5原理,一脸懵逼,所以还是简单整理一下学过的几种加密类型比较妥···

    DES

    1. DES背景

    DES(Data Encryption Standard)又叫数据加密标准,是NIST在联邦记录中公开征集密码体制时出现的。DES由IBM开发,主要用于非国家保密机关。在1999年AES(Advanced Encryption Standard)作为DES的替代品开始使用。

    2. DES原理

    DES加密算法使用64位(bit)的数据进行加密和解密,所用的密钥也是64位。密钥中有8位奇偶校验位,实际密钥长度只有56位,产生最大64位的分组大小。这是一个迭代的分组密码,使用称为Feistel的技术,其中将加密的文本分为两半,使用子密钥对其中的一半应用循环功能,然后输出与另一半进行“异或”运算;接着交换这两半,这一过程会继续下去循环16轮,但最后一个循环不交换。其中,奇偶校验位在对数据进行加密时并不参加运算。

    DES算法的入口参数有三个:Key/Data/Mode,其中:

    Key 8字节共64位,是DES算法的工作密钥,

    Data 8字节共64位,是要被加密或被解密的数据,

    Mode DES的工作方式,即加密或者解密。

    如果Mode为解密,则用Key去把密码形式的数据Date解密,还原为Data的明码形式,作为DES的输出结果。

    如果Mode为加密,则用Key去把数据Data加密,生成Data的密码形式作为DES的输出结果。

    在使用DES时,双方预先约定使用“密码”Key,然后用Key去加密数据,接收得到密文后使用同样的Key解密得到原数据,其中DES每个阶段使用的是不同的子密钥和上一阶段的输出,当执行的操作相同。

    RSA

    1. RSA背景

    RSA是目前最有影响力的公钥加密算法,是第一个既可以用于数据加密又能用于数字签名。RSA是一种非对称密码算法,能够抵抗目前为止大多数已知的密码的攻击,已被ISO推荐为公钥数据加密标准。相比DES,RSA保密性更强,但是因为RSA进行的都是大数计算,所以速度上还是DES占据优势,且差距较大。

    RSA算法基于一个简单的数论事实:将两个大素数相乘十分容易,但是想要对其乘积进行因式分解却极其困难,因此可以将乘积公开作为加密密钥,在不直接传递密钥的情况下,完成解密。即加密和解密可以使用不同的规则,只要这两种规则之间存在某种对应关系即可,这样避免了直接传递密钥,这种新的加密模式被称为“非对称加密算法”。

    2. RSA原理

    在公开密钥密码体制中,加密密钥(即公开密钥)PK是公开信息,而解密密钥(即秘密密钥)SK是需要保密的。加密算法E和解密算法D也都是公开的。虽然秘密密钥SK是由公开密钥PK决定的,但是却不能根据PK计算出SK。基于这种理论,RSA算法顺势而生。通常是先生成一对RSA密钥,其中之一是保密密钥,由用户保存;另一个为公开密钥,可对外公开,甚至可在网络服务器中注册。为提高保密强度,RSA密钥至少为500位长,一般推荐使用1024位。这就使加密的计算量很大。为减少计算量,在传送信息时,常采用传统加密方式与公开密钥加密方式相结合的方式,即信息采用改进的DES或IDEA对话密钥加密,然后使用RSA密钥加密对话密钥和信息摘要。对方接收到信息后,用不同的密钥解密可核对信息摘要。

    HILL

    1. HILL背景

    密码的函数特性是明文对密码为一对一或一对多的关系,即明文是密码的函数。传统密码中有一种移位法,移位法基本形态是加法加密系统C=P+s(mod m)。一般来说,我们以1表示A,2表示B,···,26表示Z,以此类推。由于s=0时相当于未加密,因此整个系统只有(m-1)种变化。换言之,只要试过(m-1)次,机密的信息就会泄漏出去。

    2. HILL原理

    希尔密码就是多字母代换密码的一种,多字母代换密码可以利用矩阵变换方便地描述,有时又称为矩阵变换密码。将d个明文字母通过线性变换将它们转换为d个密文字母。解密只要做一次逆变换就可以了,密钥就是变换矩阵本身。

    ① 先将英文字母变换成数字:

    A  B  C  D  ···  X   Y   Z

    1  2  3  4   ···  24 25  0  称为字母表的表值。

    ② 将明文按n个字母分组,并用对应的数字取代字母,构成一个个n维向量。

    ③ 取一个在模n运算下可逆的n阶矩阵A,用A左乘②中得到的新向量,把新向量中的数字按①中对应关系换算成字母即得到密文。

    ④ 求出可逆矩阵A在模n下的逆矩阵B,用B左乘③中得到的新向量则重新得到②的向量,从而得到原始明文。矩阵A是解密的关键,称为密钥。

    (模n运算:当n=3时,模3运算意思是:1+3=1,2+3=2,3+3=0,4+3=1即得到的数在0到n-1之间)

    MD5

    1. MD5背景

    MD5即消息摘要算法第五版,是当前计算机领域用于确保信息传输完整一致而广泛使用的散列算法之一。MD5算法的功能是将数据运算变为另一固定长度值,是散列算法的基础原理。MD5前身有MD4,MD3,MD2。

    MD5的功能有:

    ① 输入任意长度的信息,经过处理后输出为128位的信息(数字指纹);

    ② 不同的输入得到的不同的结果(唯一性);

    ③ 根据128位的输出结果不可能反推出输入的信息,即不能解密(不可逆)。

    2. MD5原理

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

    第一步:填充。如果输入信息的长度(bit)对512求余的结果不等于448,就需要填充使得对512求余的结果等于448。填充的方法是填充一个1和n个0。填充完后,信息的长度就为N*512+448(bit);

    第二步:记录信息长度。用64位来存储填充前信息长度。这64位加在第一步结果的后面,这样信息长度就变为N*512+448+64=(N+1)*512位。

    第三步: 装入标准的幻数(四个整数)。标准的幻数(物理顺序)是(A=(01234567)16,B=(89ABCDEF)16,C=(FEDCBA98)16,D=(76543210)16)。如果在程序中定义应该是(A=0X67452301L,B=0XEFCDAB89L,C=0X98BADCFEL,D=0X10325476L)。

    第四步:四轮循环运算。

    MD5有参考http://blog.csdn.net/forgotaboutgirl/article/details/7258109

  • 相关阅读:
    EF中的EntityState几个状态的说明
    sql server 更新表,每天的数据分固定批次设置批次号sql
    bootstrap Validators
    马老师 生产环境mysql主从复制、架构优化方案
    PHP在微博优化中的“大显身手”
    将form表单转化为json数据
    免费资源库收集
    奇怪的php问题
    PHP 大数自动转换为科学计数法
    access database in a helper function ?
  • 原文地址:https://www.cnblogs.com/miaoying/p/5913824.html
Copyright © 2011-2022 走看看