zoukankan      html  css  js  c++  java
  • 加密算法总结

    加密技术通常分为3种:“对称式”和“非对称式”,信息摘要算法(严格意义上不算加密算法)

     
    1 密码系统概念  ---百科

    一个加密系统S可以用数学符号描述如下:
    S={P, C, K, E, D}
    其中
    P——明文空间,表示全体可能出现的明文集合,
    C——密文空间,表示全体可能出现的密文集合,
    K——密钥空间,密钥是加密算法中的可变参数,
    E——加密算法,由一些公式、法则或程序构成,
    D——解密算法,它是E的逆。
    当给定密钥kÎK时,各符号之间有如下关系:
    C = Ek(P), 对明文P加密后得到密文C
    P = Dk(C) = Dk(Ek(P)), 对密文C解密后得明文P
    如用E-1 表示E的逆,D-1表示D的逆,则有:
    Ek = Dk-1且Dk = Ek-1
    因此,加密设计主要是确定E,D,K。

    2  加密算法原理

    份分为三种:对称加密,非对称加密,摘要算法

    (1 )对称式加密就是加密和解密使用同一个密钥。DES

      

    常见对称加密

    DES(Data Encryption Standard):对称算法数据加密标准,速度较快,适用于加密大量数据的场合;

    3DES(Triple DES):是基于DES的对称算法,对一块数据用三个不同的密钥进行三次加密,强度更高。

    RC2RC4:对称算法,用变长密钥对大量数据进行加密,比 DES 快;

    IDEA(International Data Encryption Algorithm)国际数据加密算法,使用 128 位密钥提供非常强的安全性

    AES(Advanced Encryption Standard):高级加密标准,对称算法,是下一代的加密算法标准,速度快,安全级别高,目前 AES 标准的一个实现是 Rijndael 算法;


    (2) 非对称加密

    对称加密算法实现机密信息交换的基本过程是:甲方生成一对密钥并将其中的一把作为公用密钥向其它方公开;得到该公用密钥的乙方使用该密钥对机密信息进行加密后再发送给甲方;甲方再用自己保存的另一把专用密钥对加密后的信息进行解密。

    非对称加密算法

      非对称加密算法

    另一方面,甲方可以使用乙方的公钥对机密信息进行加密后再发送给乙方;乙方再用自己的私匙对加密后的信息进行解密。

    非对称加密算法的保密性比较好,它消除了最终用户交换密钥的需要,优点在于无需共享的通用密钥;但加密和解密花费时间长、速度慢,它不适合于对文件加密而只适用于对少量数据进行加密。(百度百科)


    非对称加密的数学原理是 单项函数

    使用方法; 如果企业中有n个用户,企业需要生成n对密钥,并分发n个公钥。由于公钥是可以公开的,用户只要保管好自己的私钥即可,因此加密密钥的分发将变得 十分简单。同时,由于每个用户的私钥是唯一的,其他用户除了可以通过信息发送者的公钥来验证信息的来源是否真实,还可以确保发送者无法否认曾发送过该信息。非对称加密的缺点是加解密速度要远远慢于对称加密,在某些极端情况下,甚至能比对称加密慢上1000倍。

    常见非对称加密

    RSA基于数论非对称性(公开钥)加密算法。大整数的素因子难分解是RSA算法的基础。是一个支持变长密钥的公共密钥算法,需要加密的文件块的长度也是可变的.    使用RSA算法时,如果攻击者获得了私钥,那么他不仅能解密之前截获的消息,还能解密之后的所有消息。然而,RSA可以通过认证(如使用X.509数字证书)来防止中间人攻击

    RSA的算法涉及三个参数,n、e1、e2。

      其中,n是两个大质数p、q的积,n的二进制表示时所占用的位数,就是所谓的密钥长度。  e1和e2是一对相关的值,e1可以任意取,但要求e1与(p-1)*(q-1)互质;再选择e2,要求(e2*e1)mod((p-1)*(q-1))=1。  (n,e1),(n,e2)就是密钥对。其中(n,e1)为公钥(n,e2)为私钥。[1]

     

    RSA加解密的算法完全相同,设A为明文,B为密文,则:A=B^e1 mod n;B=A^e2 mod n;

    e1和e2可以互换使用,即:
    A=B^e2 mod n;B=A^e1 mod n;



    使用最广泛的是RSA算法,Elgamal是另一种常用的非对称加密算法
    Elgamal由Taher Elgamal于1985年发明,其基础是DiffieˉHellman密钥交换算法,后者使通信双方能通过公开通信来推导出只有他们知道的秘密密钥值[DiffieˉHellman]。DiffieˉHellman是Whitfield Diffie和Martin Hellman于1976年发明的,被视为第一种 非对称加密算法,DiffieˉHellman 与RSA的不同之处在于,DiffieˉHellman不是加密算法,它只是生成可用作对称密钥的秘密数值。在DiffieˉHellman密钥交换过程中,发送方和接收方分别生成一个秘密的随机数,并根据随机数推导出公开值,然后,双方再交换公开值。DiffieˉHellman算法的基础是具备生成共享密钥的能力。只要交换了公开值,双方就能使用自己的私有数和对方的公开值来生成对称密钥,称为共享密钥,对双方来说,该对称密钥是相同的,可以用于使用对称加密算法加密数据。
    与RSA相比,DiffieˉHellman的优势之一是每次交换密钥时都使用一组新值,而使用RSA算法时,如果攻击者获得了私钥,那么他不仅能解密之前截获的消息,还能解密之后的所有消息。然而,RSA可以通过认证(如使用X.509数字证书)来防止中间人攻击,但Diff ieˉHellman在应对中间人攻击时非常脆弱。

    (3)hash算法

    Hash算法特别的地方在于它是一种单向算法,用户可以通过Hash算法对目标信息生成一段特定长度的唯一的Hash值,却不能通过这个Hash值重新获得目标信息。因此Hash算法常用在不可还原的密码存储、信息完整性校验等。
    常见的Hash算法有MD2、MD4、MD5、HAVAL、SHA 

    MD5:严格来说不算加密算法,只能说是摘要算法

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

      在MD5算法中,首先需要对信息进行填充,使其字节长度对512求余的结果等于448。因此,信息的字节长度(Bits Length)将被扩展至N*512+448,即N*64+56个字节(Bytes),N为一个正整数。填充的方法如下,在信息的后面填充一个1和无数个0,直到满足上面的条件时才停止用0对信息的填充。然后,在这个结果后面附加一个以64位二进制表示的填充前信息长度。经过这两步的处理,现在的信息字节长度=N*512+448+64=(N+1)*512,即长度恰好是512的整数倍。这样做的原因是为满足后面处理中对信息长度的要求。(可参见MD5算法词条)




    MD5:严格来说不算加密算法,只能说是摘要算法
    MD5算法简要的叙述可以为:MD5以512位分组来处理输入的信息,且每一分组又被划分为16个32位子分组,经过了一系列的处理后,算法的输出由四个32位分组组成,将这四个32位分组级联后将生成一个128位散列值。
    在MD5算法中,首先需要对信息进行填充,使其字节长度对512求余的结果等于448。因此,信息的字节长度(Bits Length)将被扩展至N*512+448,即N*64+56个字节(Bytes),N为一个正整数。填充的方法如下,在信息的后面填充一个1和无数个0,直到满足上面的条件时才停止用0对信息的填充。然后,在这个结果后面附加一个以64位二进制表示的填充前信息长度。经过这两步的处理,如今信息字节长度=N*512+448+64=(N+1)*512,即长度恰好是512的整数倍。这样做的原因是为满足后面处理中对信息长度的要求。(可参见MD5算法词条)
    PKCS:The Public-Key Cryptography Standards (PKCS)是由美国RSA数据安全公司及其合作伙伴制定的一组公钥密码学标准,其中包括证书申请、证书更新、证书作废表发布、扩展证书内容以及数字签名数字信封的格式等方面的一系列相关协议。
    SSF33,SSF28,SCB2(SM1):国家密码局的隐蔽不公开的商用算法,在国内民用和商用的,除这些都不容许使用外,其他的都可以使用;

    编辑本段

    3  性能评估


    简单,对称密钥加密解密都是一个钥匙,所以每两人之间都要一个密钥,N个人就需要N*(N-1)个.非对称加密用公钥,解密用私钥,所以每人只需要一对钥匙,公钥发给所有人,私钥自己保存.至于安全性,对称加密密钥一旦泄露,就需要重新约定,那么如何将约定的新密钥安全的传给对方就是一个问题.而非对称加密只要自己换一对密钥,在网上重新公布一下公钥就好了.

  • 相关阅读:
    队列<一>
    二叉树的遍历[先序,中序,后序]
    The method format(String, Object[]) in the type String is not applicable for the arguments
    sqlserver 备份 与 还原
    sqlserver 无法获得数据库独占权
    page.isvalid
    bzoj3994 [SDOI2015]约数个数和
    bzoj4868 [Shoi2017]期末考试
    bzoj1179 [Apio2009]Atm
    bzoj4869 [Shoi2017]相逢是问候
  • 原文地址:https://www.cnblogs.com/catkins/p/5270736.html
Copyright © 2011-2022 走看看