zoukankan      html  css  js  c++  java
  • 信息安全--密钥短语密码

    密钥短语密码

    说明:

    最近的课程要求自己实现几种加密算法,虽然简单,但也养成习惯,做个记录。

    下面是密钥短语密码的实现步骤:

    1. 选择密钥并删除重复字母.

    2. 在明文的字母表下方从左往右写下处理的后的密钥,然后再写剩余的字母即得密文字母表.

    如密钥短语密码为: hello -> helo 
    明文: abcdefghijklmnopqrstuvwxyz
    密文: heloabcdfgijkmnpqrstuvwxyz

    3.java 代码实现:

    package com.jiangbiao.firsthomework;
    
    import java.util.ArrayList;
    import java.util.List;
    import java.util.Scanner;
    
    /**
    * 密钥短语密码
    */
    public class KeyWordCipher {
    
    public static final String word = "abcdefghijklmnopqrstuvwxyz";
    
    public static void main(String[] args) {
        String express;
        Scanner input = new Scanner(System.in);
        System.out.println("请输入密钥:");
        String miyao = input.nextLine();
    
        System.out.println("请输入明文:");
        express = input.nextLine();
        //转换成小写形式
        String miyao2 = miyao.toLowerCase();
        String express2 = express.toLowerCase();
    
        //密文
        String ciphertext = encryptionOperation(miyao2, express2);
        System.out.println("密文如下:");
        System.out.println(ciphertext);
    }
    
    /**
    * 加密操作
    * @param express
    * @return
    */
    public static String encryptionOperation(String miyao, String express){
    
        char[] miyaos = miyao.toCharArray();
        char[] expresss = express.toCharArray();
    
        List<Character> miyaosL = new ArrayList<>();
        //1.切分明文,并去除重复单词
        for (int i = 0; i < miyaos.length; i++) {
            if (i > 0){
                if (miyaosL.contains(miyaos[i])) {
                    continue;
                }
            }
            miyaosL.add(miyaos[i]);
        }
        System.out.println("切分后的单词:
    " + miyaosL.toString());
    
        //2.拼凑密文
        List<Character> wordsList = miyaosL;
        for (int k = 0; k < expresss.length; k++){
            if (!wordsList.contains(expresss[k])) {
                wordsList.add(expresss[k]);
            }
        }
    
        String ciphertext = wordsList.toString().substring(1, wordsList.toString().length()-1);
        return ciphertext.replaceAll(", ", "");
        }
    }                        
    /**
    * 测试用例:
    *
    * 请输入密钥:
    * hello
    * 请输入明文:
    * abcdefghijklmnopqrstuvwxyz
    * 切分后的单词:
    * [h, e, l, o]
    * 密文如下:
    * heloabcdfgijkmnpqrstuvwxyz
    */
    

      

  • 相关阅读:
    Redis
    Log4Net
    EF脚手架生成数据库上下文(scaffold-dbcontext)
    quartz.net
    基于LNMP的小米电子商务网站平台
    LVS的DR模式负载均衡
    华为交换机SSH配置
    VMware ESXi 6.5安装
    VLAN划分
    华为路由设备SSH配置
  • 原文地址:https://www.cnblogs.com/zishu/p/8650124.html
Copyright © 2011-2022 走看看