zoukankan      html  css  js  c++  java
  • 古典密码-多表密码体制

    如果明文中不同的位置的同一明文字母在密文中对应的密文字母不同,则称为多表密码体制。

    代表性的多表密码:

    1.Vigenere密码

    2.Beaufort密码

    3.running-key密码

    4.Vernam密码

    5.Hill密码

    例子:

    1.Vigenere密码加密:

    设明文   m=m1m2...mn

    密钥      k = k1k2...kn

    则密文   c=Ek(m)=c1c2...cn

    其中      ci=(mi+ki)(mod 26),(i=1,2,...,n)

    Vigenere密码解密:

    设明文   m=m1m2...mn

    密钥      k = k1k2...kn

    则明文   m=Dk(m)=m1m2...mn

    其中      mi=(ci-ki)(mod 26),(i=1,2,...,n)

    假设密钥是hold,生成的加密解密移位密码表为:

      +h +o +l +d
    a h o l d
    b i p m e
    c j q n f
    d k r o g

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    x a l i a
    y b m j b
    z c n k c

    2.Beaufort密码

    与Vigenere密码相似

    设明文   m=m1m2...mn

    密钥      k = k1k2...kn

    则密文   c=Ek(m)=c1c2...cn

    其中      ci=(ki+25-mi)(mod 26),(i=1,2,...,n)

    3.running-key密码

    对于周期代换密码,保密随周期的加大而增加,当周期的长度和明文一样长时,就成了running-key密码。

    4.Vernam密码

    加密:Ci=Pi⊕Ki

    解密:Pi=Ci⊕Ki

    (⊕表示模2加法)

    设明文为101,密钥是110

    则加密101⊕110=011

       解密011⊕110=101

    要求构造和消息一样长的随机密钥

    5.Hill密码

    加密:c=m K mod n

    解密:m=c K-1mod n(注意这里的K-1是K的逆元)

    设K=[11     8]

       [ 3      7]          (Ps.这是一个矩阵)

    |K|=11*7-3*8=53≡1(mod 26)

    K*=[ 7      -8]

      [-3      11]

      =[ 7      18]

          [23     11]

    K-1=|K|-1 *   K*=[ 7     18]

             [23     11]

    加密:

    明文字符为“hi“,m=(7,8)

    (7,8) *  [11     8]

            [ 3      7]

    = (23,8)

    对应密文字符"xi"

    解密:

    (23,8) *  [ 7     18]

          [23     11]

    =(7,8)

    对应明文字符"hi"。

  • 相关阅读:
    Linus Torvalds: 成功的项目源于99%的汗水与1%的创新
    web.py入门
    Python web框架有哪些
    python and 和 or
    python 安装ssh和Scrapy
    github使用
    github的.md格式文件
    python list comprehension twos for loop 嵌套for循环
    python 中函数参数传递形式
    python MySQLdb安装和使用
  • 原文地址:https://www.cnblogs.com/13jhzeng/p/5514328.html
Copyright © 2011-2022 走看看