替换加密、解密算法-程序员宅基地

技术标签: java  r语言  

替换加密解密算法方案的起源可以追溯到凯撒(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
退出程序!

 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_34323858/article/details/85723677

智能推荐

C++ Json到对象的自动序列化和反序列化工作_c++ json序列化和反序列化-程序员宅基地

文章浏览阅读555次,点赞17次,收藏22次。JSERIALIZE_DEF_OBJECTLIST(Person,Object,objectList) //接受json中的objectList对象数组,对象数组使用此宏定义。JSERIALIZE_DEF_OBJECTTYPE(Person,Son,son) //接受json中的son对象,对象成员使用此宏定义。//输出反序列化结果。

DOSBOX 0.74模拟器安装Windows 95_dosbox imgmount-程序员宅基地

文章浏览阅读7.8k次,点赞2次,收藏6次。DosBox本身带有5.0版的DOS系统,启动后虚拟一个Z盘存放有Dosbox特有的外部指令,如config.com、imgmount.com等,经测试,可以顺利安装各版本的windows 3.1系统,但是不能安装win95,需要用原版的dos镜像启动才能安装。1. 获取启动盘镜像文件 下载Win95启动软盘镜像文件,名为boot.img,放到DosBox 0.74的目录下。2. 制作硬盘镜像文件_dosbox imgmount

呼叫转移的普适性及编程实现_电话自动转移程序开发-程序员宅基地

文章浏览阅读53次。总结来说,呼叫转移是一种方便的电话通信功能,在编程中可以通过使用电话服务提供商的API来实现。然而,实际的实现可能因具体的服务提供商而有所不同,你需要参考相应的文档或与服务提供商联系以获取准确的实现细节。在函数内部,我们构建了一个API请求的有效载荷(payload),其中包含了原始电话号码和目标电话号码。在编程中,呼叫转移的实现涉及使用电话通信协议和相应的编程语言。需要注意的是,实际的呼叫转移功能的实现可能因电话服务提供商的不同而有所差异。首先,我们需要确保已经安装了Python的开发环境和相应的库。_电话自动转移程序开发

FLink聚合性能优化--MiniBatch分析_flink mini-batch-程序员宅基地

文章浏览阅读5.4k次,点赞4次,收藏15次。[@ TOC]一、MiniBatch的演进思路1、MiniBatch版本Flink 1.9.0 SQL(Blink Planner) 性能优化中一项重要的改进就是升级了微批模型,即 MiniBatch(也称作MicroBatch或MiniBatch2.0),在支持高吞吐场景发挥了重要作用。MiniBatch与早期的MiniBatch1.0在微批的触发机制略有不同。原理同样是缓存一定的数据后..._flink mini-batch

EasyExcel导入_easyexcel 对接multipartfile-程序员宅基地

文章浏览阅读808次,点赞6次,收藏6次。导入依赖<dependency> <groupId>com.alibaba</groupId> <artifactId>easyexcel</artifactId> <version>2.1.6</version></dependency>Controllerimport java.text.ParseException;import org.springframework._easyexcel 对接multipartfile

英飞凌TC3xx之一起认识DSADC系列(一)架构介绍-程序员宅基地

文章浏览阅读2.7k次,点赞27次,收藏42次。一文清晰了解英飞凌TC3xx系列的架构和组成部分,适用于正在使用EDSADC功能的人们。_dsadc

随便推点

2022考研日语71分自学经验贴;日语可以自学吗?-程序员宅基地

文章浏览阅读1.2k次,点赞3次,收藏5次。目录1 个人对考研日语的评价1 日语VS英语2 考研日语适合哪些人,什么时候开始3 找到可以选日语的院校专业的方法4 高考日语自学经历(供参考)4.1 学习过程4.2 必用资料5 考研日语自学+作文课经历(供参考)5.1 资料相关5.2 完型(20分)5.3 阅读(40分)5.4 翻译(15分)5.5 作文(25分)end实在受不了英语应试的折磨,高考和考研都用了203日语替换了英语(高考127分,考研估分65-70分)1 个人对考研日语的评价我是有了高考127分的基础(大概N3水平,N2擦线水平),

JVM性能优化 (一) 初识JVM-程序员宅基地

文章浏览阅读703次,点赞22次,收藏24次。到这里文章就讲完了,有疑问的兄弟可以在下面讨论或留言,也祝大家在今年开开心心,健健康康,能够拥有一份好工作,大家加油,我是牧小农!自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

通过手动给upx去壳简单了解逆向_upx脱壳机-程序员宅基地

文章浏览阅读1.7k次。对于像我这种想入门逆向的,这种方式真的可以培养兴趣,也从中学到了很多知识,我也不会仅仅止步于脱upx的。[外链图片转存中…(img-xkCBlSoD-1693021558445)]即可。对于像我这种想入门逆向的,这种方式真的可以培养兴趣,也从中学到了很多知识,我也不会仅仅止步于脱upx的。_upx脱壳机

Quartz定时任务调度cron 表达式时间格式(☆)_cron表达式 下午5点30-程序员宅基地

文章浏览阅读890次。cron 表达式的格式 Quartz Cron 表达式支持到七个域 名称 是否必须 允许值 特殊字符 秒 是 0-59 ..._cron表达式 下午5点30

SQL Server 疑难杂症--转换科学计数法的数值字符串为decimal类型_mssql 字符串转decimal 精度问题-程序员宅基地

文章浏览阅读1.8k次。今天在操作数据库时,需要将字符串转换成Decimal类型。代码如下:selectcast('0.12'asdecimal(18,2));selectconvert(decimal(18,2),'0.12');当需要将科学计数法的数字字符串转换成Decimal时,这2种写法都报错:Msg 8114, Level 16, State 5, Line 1Erro..._mssql 字符串转decimal 精度问题

soul源码解读(十八)-- resilience4j插件原理分析_resilience4j timeoutduration含义-程序员宅基地

文章浏览阅读553次。soul源码解读(十八)resilience4j插件使用resilience4jresilience4j插件是网关用来对流量进行限流与熔断的可选选择之一。resilience4j为网关熔断限流提供能力。插件使用1.启动 admin,打开 resilience4j 插件开关2.在 bootstrap 项目的 pom 文件引入 resilience4j 插件的相关依赖,启动 bootstrap <!-- soul resilience4j plugin start--> <_resilience4j timeoutduration含义

推荐文章

热门文章

相关标签