栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

【算法】Java凯撒密码实现方法

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【算法】Java凯撒密码实现方法

【算法】Java凯撒密码实现方法 1、凯撒密码介绍

凯撒密码作为一种最简单的消息加密方式,在古罗马的时候都已经很流行,他的基本思想是:通过把字母移动一定的位数来实现加密和解密。明文中的所有字母都在字母表上向后(或向前)按照一个固定数目进行偏移后被替换成密文。

例如,当偏移量是3的时候,所有的字母A将被替换成D,B变成E,由此可见,位数就是凯撒密码加密和解密的秘钥。

2、凯撒密码的实现

在此之前我们必须得了解一个基本概念==“移位和循环移位”==

移位和循环移位

​ 移位就是将一段数码按照规定的位数整体性地左移或右移。循环右移就是当右移时,把数码的最后的位移到数码的最前头,循环左移相反。

​ 例如,对十进制数码0123456789右移一位(十进制位)的结果为9012345678,而循环左移一位得到的结果则为1234567890。

凯撒密码就是使用的循环移位

2.1、基于ASCII码实现凯撒密码

加密方法如下:

@Test
public void test(){
    String abc = asciiCaesarEncrypt("ABC", 125);
    System.out.println(abc);
}
public String asciiCaesarEncrypt(String str,int offset){
    char[] chars = str.toCharArray();
    //循环位移算法
    for (int i = 0; i < chars.length; i++) {
        int i1 = chars[i] + offset;
        if(i1>127){
            chars[i]= (char) (i1%=128);
        }else if (i1<0){
            int abs = Math.abs(i1)%128;
            chars[i]=(char)(128-abs);
        }else {
            chars[i] += offset;
        }
    }
    return String.valueOf(chars);
}
上面的运行结果
>?@

解密方法如下:

public String asciiCaesarDecrypt(String str,int offset){
    char[] chars = str.toCharArray();
    //循环位移算法
    for (int i = 0; i < chars.length; i++) {
        int i1 = chars[i] - offset;
        if(i1>127){
            chars[i]= (char) (i1%=128);
        }else if (i1<0){
            int abs = Math.abs(i1)%128;
            chars[i]=(char)(128-abs);
        }else{
            chars[i] -= offset;
        }
    }
    return String.valueOf(chars);
}
2.2、基于字母表实现的凯撒密码

加密方法如下:

@Test
public void test(){
    String abc = lowerCaseCaesarEncrypt("zabc", 25);
    System.out.println(abc);
}
public String lowerCaseCaesarEncrypt(String str,int offset){
    char[] chars=str.toCharArray();
    char[] lowerCase=new char[26];
    for (int i = 0; i < 26; i++) {
        lowerCase[i]= (char) ('a'+i);
    }
    String lowerCaseStr=String.valueOf(lowerCase);
    for (int i = 0; i < chars.length; i++) {
        int i1 = lowerCaseStr.indexOf(chars[i]) + offset;
        if(i1>25){
            chars[i]=lowerCase[(i1%=26)];
        }else if (i1<0){
            int abs = Math.abs(i1)%26;
            chars[i]=lowerCase[(26-abs)];
        }else{
            chars[i] += offset;
        }
    }
    return String.valueOf(chars);
}
上面的运行结果
yzab

解密方法如下:

public String lowerCaseCaesarDecrypt(String str,int offset){
    char[] chars=str.toCharArray();
    char[] lowerCase=new char[26];
    for (int i = 0; i < 26; i++) {
        lowerCase[i]= (char) ('a'+i);
    }
    String lowerCaseStr=String.valueOf(lowerCase);
    for (int i = 0; i < chars.length; i++) {
        int i1 = lowerCaseStr.indexOf(chars[i]) - offset;
        if(i1>25){
            chars[i]=lowerCase[(i1%=26)];
        }else if (i1<0){
            int abs = Math.abs(i1)%26;
            chars[i]=lowerCase[(26-abs)%26];
        }else{
            chars[i] -= offset;
        }
    }
    return String.valueOf(chars);
}

本文到此完毕

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/991651.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号