zoukankan      html  css  js  c++  java
  • 密码学笔记——大致说明对称密码学

    对称密钥加密:加密和解密是同一个密钥。安全性是依赖于对密钥的保密。

    非对称密钥加密:加密和解密不是同一个密钥。并且有一个是公开的即为公钥,另一个就是私钥。私钥需要严格保密。

                                它的安全性依赖于数学,我们需要找到一个单项陷门函数(即单项并且存在陷门的函数。单项:y=f(x),从x很容易得出y得值但想要从y得出x得值基本上是不可能得。陷门:就是存在z使得知道z                              则可以很容易地计算出x=f ^ (-1) (y)。)从而实现加密密钥和解密密钥不同并且难以互推。例如RSA。

    当铺密码:将中文和数字进行转化的密码,算法相当简单。当前汉字有多少笔画出头,就是转化成数字几。例如王——6。

    摩斯密码:就是会给一段声音,大概是由滴和哒构成,滴是•,哒是—。将所听到的记录下来,对照摩斯表进行解密。

    单码代换密码:

    加法密码:凯撒密码,移位密码。P明文,C是密文,k是我们选取的密钥。加密:C=(P+k)%26;解密:P=(C-k)%26。破解:蛮力攻击,统计攻击。

    乘法密码:加密:C=(P*k)%26;解密:P=(C*k^(-1))%26.   k^(-1)是k的乘法逆。如果(a*b) mod n=1,则a与b在集合Z中(Z是0——n-1)互为乘法逆。

                      注意:不是每一个数在Z中都有乘法逆只有gcd(n,a)=1的时候a具有一个乘法逆。因为我们是针对26个字母来进行加密解密,所以我们可用的密钥只有12个:1,3,5,7,9,11,17,19,21,                                 23,25.

    仿射密码:加法密码+乘法密码。使用的是密钥对(k1,k2)。加密:T=(P*k1) mod n;C=(T+k2) mod n;解密:T=(C-k2) mod n;P=(T*k1^(-1)) mod n。破解:蛮力攻击,统计攻击,明文攻击。

    多码代换密码:

    自动密钥密码:P=P1P2P3.....,C=C1C2C3.....,k=(k,P1,P2,P3...)

                             加密:Ci=(Pi+ki)mod 26;

                             解密:Pi=   (Ci-ki)  mod 26;

    Playfair密码:密钥是一个5*5的字母表

                           将明文两个一组的分开,若出现单个字母,则要补一个。若同一分组的两个字母相同,则要加入一个伪字母。

                           加密规则:1.一对中俩字母在同一行中,每个字母的加密字符就是同一行当中右侧的下一个字母。

                                             2.一对中俩字母在同一列中,每个字母的加密字符就是同一列中下面一个字符。

                                             3.一对字母处于不同行不同列,每个字母的加密字符就是处于同一行和另一个字母同一列的字母。

                           例如hello加密,先分组 he    lx(x是伪字母)    lo

    L G D B A
    Q M H E C
    U R N I/J F
    X V S O K
    Z Y W T

    p

            EC  QZ                     BX

            密文就是:ECQZBX。             

    维吉尼亚密码:P=P1P2P3...,C=C1C2C3...,k=(k1,k2...km)(k1,k2...km).密钥流是一个长度m的其实密钥流的重复。

                             加密:Ci=(Pi+ki) mod 26        解密 Pi=(Ci-ki) mod 26

                             其实就是明文中每个字母所加的密钥值不同的加法密码。

                             破解:先求密钥长度。在将密文按密钥长度进行分组,将每一个分组看成加法密码,进行分析。

    希尔密码:明文分组,每次加密一个分组,分组中的每一个字母多对分组中另一个字母起加密作用。

                      密钥是一个矩阵K。   

    k11 k12 ... k1m
    k21 k22 ... k2m
    ... ... ... ...
    km1 km2 ... kmm

    加密:将明文分成l*m的矩阵。C=P*K;

    C1=(P1*k11+P2*k12+...+Pm*k1m)mod 26

    C2=(P1*k21+P2*k12+...+Pm*k2m)mod 26

    .....

    C3=(P1*km1+P2*km2+...+Pm*kmm)mod 26

                      解密:P=C*K^(-1);

                     因为涉及到乘法逆所以密钥矩阵K 一定要具有乘法逆。

    无密钥换位密码:

    栅栏密码:将明文分组。排成矩阵,在按列去读。

                      例如Meet me at the park.

                      m   e    e   t

                      m   e    a   t

                      t     h    e   p

                      a     r    k            再按列读取就是mmtaeehreaekttp;

    有密钥的换位密码:密钥是一个转换密钥

    3 1 4 5 2
    1 2 3 4

    5

    ↓加密。↑解密。

    将明文分为5组,每一组的三个字母放在第一个位置,第一个字母放在第二个位置上,以此类推。形成密文。

                             解密时,将密文五个一组。将每组第一个字母放到第三个位置时=上,第二个字母放到第一个位置上,以此类推,解读出明文。

    非对称密钥加密:加密和解密不是同一个密钥。并且有一个是公开的即为公钥,另一个就是私钥。私钥需要严格保密。

                                它的安全性依赖于数学,我们需要找到一个单项陷门函数(即单项并且存在陷门的函数。单项:y=f(x),从x很容易得出y得值但想要从y得出x得值基本上是不可能得。陷门:就是存在z使得知道z                              则可以很容易地计算出x=f ^ (-1) (y)。)从而实现加密密钥和解密密钥不同并且难以互推。例如RSA。

    RSA:安全性在于大整数质因子分解。

               生成密钥的步骤

               1.首先,选择两个大素数。p,q;求出两个数的乘机n=p*q,以及n的欧拉函数:φ(n)=(p-1)(q-1);

               2.在φ(n)中随机选取一个数e,1<e<φ(n)并且e与φ(n)互素,即gcd(e,φ(n))=1;

              3.再求出e mod φ(n)的逆,记为d。即是(e*d) mod φ(n)=1。至此公钥为(e,n),私钥为(d,n);

              加密:C=P^e mod n;

              解密 :P=C^d mod n;

              例子:p=7,q=11;n=p*q=77;φ(n)=(7-1)(11-1)=60;

                         选择e=13,则d=37;

                         明文为5

                         密文 C=5^13 mod 77=26

                         解密 P=26^37 mod 77=25

        证明 C=P^e mod n;

                P=C^d mod n = (P^e mod n)^d mod n=P^(e*d) mod n 

               e*d=k*φ(n)+1;

               P=P^(k*φ(n)+1)mod n=P mod n=P;(欧拉定理:n=p*q,a<n,k为整数,a^(k*φ(n)+1)≡a mod n)

  • 相关阅读:
    配置PL/SQL Developer连接Oracle数据库
    解决RPC failed; HTTP 413 curl 22 The requested URL returned error: 413 Request Entity Too Large问题
    解决java.lang.IllegalArgumentException: No converter found for return value of type: class java.util.ArrayList问题
    解决spring mybatis 整合后mapper接口注入失败
    如何解决Failed to start component [StandardEngine[Catalina].StandardHost[127.0.0.1].StandardContext[]]问题
    五毛的cocos2d-x学习笔记05-场景与场景动画,动作
    五毛的cocos2d-x学习笔记04-触摸点
    五毛的cocos2d-x学习笔记03-控件
    五毛的cocos2d-x学习笔记02-基本项目源码分析
    五毛的cocos2d-x学习笔记01-创建项目
  • 原文地址:https://www.cnblogs.com/nldyy/p/8539170.html
Copyright © 2011-2022 走看看