• 替换加密、解密算法


    替换加密解密算法方案的起源可以追溯到凯撒(Caesar)时代,据说凯撒为了保障情报的可靠性而发明了凯撒密码。凯撒密码是一种简单的置换密码,在加密时,字母表中的每个字母都用其后的第三个字母表示,例如,a用d表示,b用e表示,......。在解密时,只需要执行逆过程即可。

    1. 替换加密、解密算法

    随这历史的发展,替换密码算法方案已具有很多种形式,主要有以下几种:

    • 单表代替密码算法方案
    • 同音代替密码算法方案
    • 多表代替密码算法方案
    • 多字母组代替密码算法方案

    下面以单表代替密码算法方案为例进行介绍。

    1)替换加密算法

    替换加密算法的基本方法是首先给定一个密钥n,对应明文中的每一个字符的ASCII码都向后移动n而得到相应的密文。

    按照此思路来编写相应的加密算法,代码示例如下:

        /**
         * 加密算法
         * @param str 明文字符串
         * @param n    明文中每个ASCII码向后移动的位数,即密钥
         * @return
         */
        static char[] jiami(char[] str,int n){
            int i,len;
            char[] miwen;
            len=str.length;
            miwen=new char[len];    //申请内存
            for(i=0;i<len;i++){
                miwen[i]=(char)(str[i]+n);
            }
            return miwen;
        }

    2)替换解密算法

    替换解密算法的基本方法是首先给定一个密钥n,这个密钥必须和加密时的密钥一致,对应密文中的每一个字符的ASCII码都向前移动n而得到相应的明文。

    按照此思路来编写相应的加密算法,代码示例如下:

        /**
         * 解密算法
         * @param miwen 密文字符串
         * @param n    密文中每个ASCII码向前移动的位数,应与加密算法向后移动位数相同
         * @return
         */
        static char[] jiemi(char[] miwen,int n){
            int i,len;
            char[] str;
            len=miwen.length;
            str=new char[len];    //申请内存
            for(i=0;i<len;i++){
                str[i]=(char)(miwen[i]-n);
            }
            return str;
        }

    2. 替换加密、解密算法实例

    完整的程序代码示例如下:

    package com.cn.mimaxue;
    
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.util.Scanner;
    
    //替换加密解密算法
    public class THJMJM {
        /**
         * 加密算法
         * @param str 明文字符串
         * @param n    明文中每个ASCII码向后移动的位数,即密钥
         * @return
         */
        static char[] jiami(char[] str,int n){
            int i,len;
            char[] miwen;
            len=str.length;
            miwen=new char[len];    //申请内存
            for(i=0;i<len;i++){
                miwen[i]=(char)(str[i]+n);
            }
            return miwen;
        }
        /**
         * 解密算法
         * @param miwen 密文字符串
         * @param n    密文中每个ASCII码向前移动的位数,应与加密算法向后移动位数相同
         * @return
         */
        static char[] jiemi(char[] miwen,int n){
            int i,len;
            char[] str;
            len=miwen.length;
            str=new char[len];    //申请内存
            for(i=0;i<len;i++){
                str[i]=(char)(miwen[i]-n);
            }
            return str;
        }
        public static void main(String[] args) throws IOException {
            char[] str,miwen,jiemi;
            int n,i;
            String go;
            System.out.println("替换加密解密算法演示!");
            Scanner input = new Scanner(System.in);
            do{
                System.out.print("请输入替换加密解密算法的密钥:");
                n = input.nextInt();
                System.out.print("请输入明文:");
                BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
                String strtemp=br.readLine();
                str=strtemp.toCharArray();
                System.out.print("明文为:");
                for(i=0;i<str.length;i++){
                    System.out.print(str[i]);
                }
                System.out.println();
                miwen=jiami(str,n);
                System.out.print("密文为:");
                for(i=0;i<miwen.length;i++){
                    System.out.print(miwen[i]);
                }
                System.out.println();
                jiemi=jiemi(miwen,n);
                System.out.print("解密为:");
                for(i=0;i<jiemi.length;i++){
                    System.out.print(jiemi[i]);
                }
                System.out.println();
                System.out.print("是否继续(y/n):");
                go = input.next();
            }while(go.equalsIgnoreCase("y")); 
            System.out.println("退出程序!");
    
        }
    
    }

    程序运行结果如下:

    替换加密解密算法演示!
    请输入替换加密解密算法的密钥:4
    请输入明文:Hello everyone!
    明文为:Hello everyone!
    密文为:Lipps$iziv}sri%
    解密为:Hello everyone!
    是否继续(y/n):y
    请输入替换加密解密算法的密钥:3
    请输入明文:One world, One dream!
    明文为:One world, One dream!
    密文为:Rqh#zruog/#Rqh#guhdp$
    解密为:One world, One dream!
    是否继续(y/n):n
    退出程序!
  • 相关阅读:
    《穿越时空的git》之创建版本库和常用命令操作
    全链路灰度在数据库上我们是怎么做的?
    菜鸟 CPaaS 平台微服务治理实践
    与字节、小米、移动云等企业一起揭秘 RocketMQ 实践之道
    2022 云原生编程挑战赛火热报名中!看导师如何拆解 Serverless 赛题?
    阿里云消息队列 Kafka消息检索实践
    阿里云 MSE 支持 Go 语言流量防护
    不懂就问,快速成为容器服务进阶玩家!
    有奖征文 | 2022 云原生编程挑战赛征稿活动开启!
    发评测赢好礼 | Serverless 函数计算征集令
  • 原文地址:https://www.cnblogs.com/gaopeng527/p/4518070.html
Copyright © 2020-2023  润新知