zoukankan      html  css  js  c++  java
  • 古典密码学

    从远古到1949期间使用的密码都叫古典密码

    分类:

      根据密钥的个数分为单表代换密码和多表代换密码

        单个密钥为单表代换密码

        多个密钥为多表代换密码

      根据明文和密文的值域分为置换密码和代换密码。

        值域相同为置换密码

        值域不同为代换密码

    1.置换密码:

      置换密码又叫换位密码(Transposition Cipher)

        定义:把明文中各字符的位置次序重新排列得到密文。特点:字符不变只是打乱了位置和次序。 

        在有限集X上的运算σ: X→X,σ是一个一一映射函数,那么称σ为一个置换。  若σ是一个置换,∀x∈X,存在唯一的x使得σ(x)= x'。同理可以定义逆置换σ-1: X→X,σ-1也是双射函数,并且σ-1的定义域和值域相同,即∀x′∈X,存在唯一的x∈X使得σ-1(x ′)=x。

      置换函数=(x,y,z)(p)(x1,x2) 求逆置换只需要第一个不动后面倒叙就行了

        M,C,K分别为明文空间,密文空间和密钥空间。

        1.列置换密码(按列换位&按列独处明文序列得到密文):

          将明文以设定的固定分组宽度m写出,不足的用约定的方式填充

        2.周期置换函数:

          将明文按固定长度m分组,然后对每组字符串按置换函数重新排列得到密文

    2.代换密码(代替密码,位置不变更改字符)

      放射密码:

         将26个英文字母分别对应(0, 1, 2, …, 25) 加密变换:c=Ea,b(m)≡am+b (mod 26) 解密变换:m=Da,b(c)≡a-1(c-b) (mod 26) 其中,a、b 是密钥,为满足0≦a,b≦25和gcd(a, 26)=1的整数,gcd(a, 26)表示a和26的最大公因子, gcd(a, 26)=1 表示a和26是互素的;a-1表示a的逆元,即a-1∙a=1mod26。

    3.单表代换密码:

      只有一个密钥

      代表:

        1.凯撒加密:

          加密:看作英文字母表循环左移三个

          解密:右移即可

          用数学表达式处理:将字母表和0-25一一对应,然后mod(26)来处理:

          加密函数:E(m)=(m+k)(mod26)

          解密函数:D(m)=(m-k)(mod26)

        2.放射密码:

          跟凯撒密码类似,只是对于K是自己取。

    4.多表代换密码

      有多个密钥控制:

      代表:

        1.维吉尼亚密码:

          输入字符串或者数字作为密钥,输入的如果是字符串就替换为0-25对应的英文字母表。

          根据秘钥的个数将明文分类加密,分别一一将明文分组后根据对应的密钥,一一相加后mod(26)加密对换

          解密就反着。

          其实就是凯撒密码将密钥变为多个分组后一个一个加密。

        2.Playfair密码。

          首先一个5x5的表格,然后确定密钥后根据从左往右,从上往下的顺序填入,I和J填入一个空格,剩下的按英文字母按照顺序填入。然后根据表格两两一起加密,如果有单个就约定一个填入。

          加密:

            1.p和q同行,就变为右边的数

            2.同列就变为下面的数

            3.不同行不同列就变为表格对顶数。

          解密相反

  • 相关阅读:
    css3 transform属性及其二维变换矩阵
    博客开园
    javascript测试题总结
    css、js压缩方法
    如何检测当前浏览器的类型及版本
    原生js放大镜效果
    JavaScript编程风格 (share)
    this 的使用方法 —— javascript中的this讲解! (share)
    利用Xcode建立PhoneGap应用程序环境
    alifd的bug列表
  • 原文地址:https://www.cnblogs.com/beautiful7/p/12396836.html
Copyright © 2011-2022 走看看