移位密码

作者: 谁吃了我的薯条 | 来源:发表于2018-01-14 11:47 被阅读0次

移位密码,其基础为数论中的模运算。其基本定义如下:

假设a 和 b 均为整数,m 是正整数。若 m 整除 b-a ,则可将其表示为 a≡b(mod m)。读为:"a与 b模 m 同余",正整数 m称为模数;
信道

密码体制
一个密码体制必须满足以下五元组(P,E,K,R,D):

  1. P表示所有可能的明文组成的有限集
  2. E表示所有可能的密文组成的有限集
  3. K代表密钥空间,是所有可能的密钥组成的有限集
  4. 对任意的k∈K,都存在一个加密法则Ek∈E和对应的解密法则dk∈D。并且对每一个ek:P->E 和dk:E-> P,
    对任意的明文x∈P,均有dk(Ek(x))=x.

对于移位密码,其密码体制为:

令P=E=X=Z26。对0<=K<=25,任意x,y∈Z26,定义:
ek(x)=(x+K) mod 26
以及
dk(y)=(y-K) mod 26

Java 实现移位密码


package Cryptography;

import java.util.HashMap;
import java.util.IllegalFormatException;
import java.util.Map;

public class ClassicalCryptography {
    //private Map<Character,Integer> map=new HashMap<>(); // 字母映射为数字
    private int K; // 密钥K
    public ClassicalCryptography(int K){
        this.K=K;
    }

    public  String EnCipher(String OrignalStr){  // 获取密文
         OrignalStr=OrignalStr.toLowerCase();
        StringBuffer stringBuffer=new StringBuffer();
        for (int i = 0; i <OrignalStr.length() ; i++) {
            int c=OrignalStr.charAt(i)-'a';
            if(c>25||c<0){ //跳过非小写字母
                stringBuffer.append(OrignalStr.charAt(i));
            }
            else {
                stringBuffer.append((char)(('a'+EnK(K,c,26))));
            }
        }
        return stringBuffer.toString();
    }
    public  String DeCipher(String OrignalStr){ //获取明文
         OrignalStr=OrignalStr.toLowerCase();
        StringBuffer stringBuffer=new StringBuffer();
        for (int i = 0; i <OrignalStr.length() ; i++) {
            int c=OrignalStr.charAt(i)-'a';
            if(c>25||c<0){   //跳过非小写字母
                stringBuffer.append(OrignalStr.charAt(i));
            }else {
                stringBuffer.append((char)(('a'+DeK(K,c,26))));
            }

        }
        return stringBuffer.toString();
    }

    private static int EnK(int K,int aim,int mod){  // 加密
        int p=aim+K;
        return p%mod;
    }
    private static int DeK(int K,int aim,int mod){  // 解密
        int p=aim-K<0?aim-K+mod:aim-K;
        return p%mod;
    }

    public static void main(String[] args) {
        ClassicalCryptography c=new ClassicalCryptography(11);
        String str="i am want to see you !";
        System.out.println("原文为:  "+str);
        String ste=c.EnCipher(str);
        System.out.println("密文为:  "+ste);
        System.out.println("解密后为: "+ c.DeCipher(ste));
    }
}


RESULT

原文为:  i am want to see you !
密文为:  t lx hlye ez dpp jzf !
解密后为: i am want to see you !

@See
web
github

相关文章

  • 位移密码算法挑战

    著名的凯撒密码Caesar cipher,又叫移位密码。 移位密码也就是密码中的字母会按照指定的数量来做移位。 一...

  • Caesars Cipher(凯撒密码)

    Caesar cipher,又叫移位密码。 移位密码也就是密码中的字母会按照指定的数量来做移位。 一个常见的案例就...

  • fromCharCode疑惑

    移位密码也就是密码中的字母会按照指定的数量来做移位。一个常见的案例就是ROT13密码,字母会移位13个位置。由'A...

  • 仿射密码Python实现

    算法分析 仿射密码结合了移位密码和乘数密码的特点,是移位密码和乘数密码的组合。 仿射密码的加密算法就是一个线性变化...

  • 移位密码

    移位密码,其基础为数论中的模运算。其基本定义如下: 密码体制:一个密码体制必须满足以下五元组(P,E,K,R,D)...

  • 小记1—基础概念

    1.密码发展阶段 古典密码 现代密码学 量子密码 2.古典密码 代替密码、移位密码、代数密码(比如异或运算) 单表...

  • 1.3 外国历史

    象形文字、棋盘密码、兽栏法、摩斯电码等,做替换,是一种编码 凯撒密码移位密码/加法密码 Vigenere密码分组加...

  • 【Android】编码与加密

    加密 密码学 起源:古代战争 - 古典密码学 移位式加密:密码棒 加密算法:缠绕木棒后书写密钥:木棒的尺寸规格 替...

  • FCC 题目 Caesars Cipher

    要求 让上帝的归上帝,凯撒的归凯撒。 下面我们来介绍风靡全球的凯撒密码Caesar cipher,又叫移位密码。 ...

  • Caesars Cipher(凯撒密码)

    凯撒密码 (让上帝的归上帝,凯撒的归凯撒) 下面我们来介绍风靡全球的凯撒密码Caesar cipher,又叫移位密...

网友评论

    本文标题:移位密码

    本文链接:https://www.haomeiwen.com/subject/ejdkoxtx.html