经典密码学算法-凯撒密码简单实现

前言:

在密码学中,恺撒密码(英语:Caesar cipher),或称恺撒加密、恺撒变换、变换加密,是一种最简单且最广为人知的加密技术。它是一种替换加密的技术,明文中的所有字母都在字母表上向后(或向前)按照一个固定数目进行偏移后被替换成密文。例如,当偏移量是3的时候,所有的字母A将被替换成D,B变成E,以此类推。这个加密方法是以罗马共和时期恺撒的名字命名的,当年恺撒曾用此方法与其将军们进行联系。

思路:这种算法的思想是移位思想,加密过程将明文中的值与已有库(lib)做匹配,再取lib库移位后的值。解密过程反向移位,其它操作相同。

下面进入正题,使用java简单实现恺撒密码算法,走Demo:

/**
 * Copyright (C), 2000-2021, XXX有限公司
 * FileName: Caesar
 * Author: wangyetao
 * Date: 21-10-12 03:02:46
 * Description: 经典密码学算法-凯撒算法简单实现
 * History:
 * <author> <time> <version> <desc>
 * 作者姓名 修改时间 版本号 版本描述
 */
package simple.callback.cryptographyalgorithm;

/**
 * @ClassName: Caesar
 * @Description: 凯撒算法
 * @Author: wangyetao
 * @Date: 21-10-12 03:02:46
 */
public class Caesar {

    //数字库
    private int[] stuffNumsLibs = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
    //偏移位,默认正向偏移
    private int offset = 0;

    public Caesar(int inputoffset) {
        offset = inputoffset;
    }


    //加密
    private int[] encryption(int[] numsArr) {
        int[] encryption = new int[numsArr.length];

        for (int i = 0; i < numsArr.length; i++) {


            //查找
            for (int j = 0; j < stuffNumsLibs.length; j++) {

                if (numsArr[i] == stuffNumsLibs[j]) {
                    //替换为目标位的数值,测试数8起始位8,测试偏移位3,targetIndex->1
                    //替换为目标位的数值,测试数8起始位8,测试偏移位4,targetIndex->2
                    //替换为目标位的数值,测试数8起始位8,测试偏移位13=3,targetIndex->1

                    int matchinglibsIndex = stuffNumsLibs[j];
                    int libsLength = stuffNumsLibs.length;
                    //模位
                    int matrix = offset % libsLength;
                    int tmpIndex = matchinglibsIndex + matrix;
                    //计算出偏移后的目标位
                    int targetIndex = tmpIndex % libsLength;

                    //取目标位的数值
                    encryption[i] = stuffNumsLibs[targetIndex];
                    break;//查找结束
                }

            }
        }

        return encryption;
    }



    //解密
    private int[] decrypt(int[] numsArr) {
        int[] decrypt = new int[numsArr.length];

        for (int i = 0; i < numsArr.length; i++) {

            //查找
            for (int j = 0; j < stuffNumsLibs.length; j++) {

                if (numsArr[i] == stuffNumsLibs[j]) {
                    //替换为目标位的数值,测试数0起始位0,测试偏移位-2,targetIndex->8
                    //替换为目标位的数值,测试数0起始位0,测试偏移位-3,targetIndex->7
                    //替换为目标位的数值,测试数0起始位0,测试偏移位-13=-3,targetIndex->7

                    int matchinglibsIndex = stuffNumsLibs[j];
                    int libsLength = stuffNumsLibs.length;
                    //模位
                    int matrix = offset % libsLength;
                    int tmpIndex = matchinglibsIndex - matrix;

                    //计算出偏移后的目标位
                    int targetIndex = 0;
                    if (tmpIndex >= 0) {
                        targetIndex = tmpIndex;
                    } else {
                        targetIndex = libsLength - Math.abs(tmpIndex);
                    }

                    //取目标位的数值
                    decrypt[i] = stuffNumsLibs[targetIndex];
                    break;//查找结束
                }

            }
        }

        return decrypt;
    }


    //Test Caesar
    public static void main(String[] args) {

        int[] numsArr = {2, 8, 2, 7, 3, 7, 4, 4, 9, 6, 1, 8, 0, 1, 3, 8, 7};
        Caesar kaiSa = new Caesar(5);



        System.out.println("经典密码学算法-凯撒算法简单实现,原数组:");
        for (int i = 0; i < numsArr.length; i++)
            System.out.print(numsArr[i] + "\t");


        System.out.println("\n经典密码学算法-凯撒算法简单实现,加密后:");
        int[] numsEncryptionArr = kaiSa.encryption(numsArr);
        for (int i = 0; i < numsEncryptionArr.length; i++)
            System.out.print(numsEncryptionArr[i] + "\t");


        System.out.println("\n经典密码学算法-凯撒算法简单实现,解密还原:");
        int[] numsDecryptArr = kaiSa.decrypt(numsEncryptionArr);
        for (int i = 0; i < numsDecryptArr.length; i++)
            System.out.print(numsDecryptArr[i] + "\t");

    }

}

DEMO输出:

经典密码学算法-凯撒算法简单实现,原数组:
2	8	2	7	3	7	4	4	9	6	1	8	0	1	3	8	7	
经典密码学算法-凯撒算法简单实现,加密后:
7	3	7	2	8	2	9	9	4	1	6	3	5	6	8	3	2	
经典密码学算法-凯撒算法简单实现,解密还原:
2	8	2	7	3	7	4	4	9	6	1	8	0	1	3	8	7	
Process finished with exit code 0

 在此记录与总结,2021年 10月 12日 星期二 05:01:17 CST。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

dnbug Blog

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值