前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >凯撒加密算法(最简单的对称加密)

凯撒加密算法(最简单的对称加密)

作者头像
java404
发布于 2018-05-18 03:19:16
发布于 2018-05-18 03:19:16
6.8K05
代码可运行
举报
文章被收录于专栏:java 成神之路java 成神之路
运行总次数:5
代码可运行

凯撒算法 概述

凯撒密码是罗马扩张时期朱利斯• 凯撒(Julius Caesar)创造的,用于加密通过信使传递的作战命令。它将字母表中的字母移动一定位置而实现加密。例如如果向右移动 2 位,则 字母 A 将变为 C,字母 B 将变为 D,…,字母 X 变成 Z,字母 Y 则变为 A,字母 Z 变为 B。

凯撒加密,右移2位对应结果图

因此,假如有个明文字符串“Hello”用这种方法加密的话,将变为密文: “Jgnnq” 。而如果要解密,则只要将字母向相反方向移动同样位数即可。如密文“Jgnnq”每个字母左移两位 变为“Hello” 。这里,移动的位数“2”是加密和解密所用的密钥。

示例

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/**
 * 凯撒加密
 * @author jijs
 */
public class CaesarDemo {

    public static String caesar(String s, int offset) throws Exception {
        String cipher = "";
        for (int i = 0; i < s.length(); i++) {
            char c = s.charAt(i);
            if (c >= 'a' && c <= 'z') // 是小写字母
            {
                c += offset % 26; // 移动 key%26 位
                if (c < 'a')
                    c += 26; // 向左超界
                if (c > 'z')
                    c -= 26; // 向右超界
            } else if (c >= 'A' && c <= 'Z') // 是大写字母
            {
                c += offset % 26;
                if (c < 'A')
                    c += 26;
                if (c > 'Z')
                    c -= 26;
            }
            cipher += c;
        }
        return cipher;
    }

    public static void main(String args[]) throws Exception {
        String cipher = caesar("Hello", 2);
        String text = caesar(cipher, -2);
        System.out.println("原文:Hello\r\n加密后:" + cipher + "\r\n解密后:" + text);
    }

}

该程序既可用于加密又可用于解密。只要传入明文和偏移量即可加密,解密需要传入密文和负的偏移量就可以解密。

输出的结果:

原文:Hello 加密后:Jgnnq 解密后:Hello

安全性

凯撒密码由于加解密比较简单,密钥总共只有 26 个,攻击者得到密文后即使不知道密钥,也可一个一个地试过去,最多试 26 次就可以得到明文。

凯撒变种

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/**
 * 凯撒加密
 * @author jijs
 */
public class CaesarDemo2 {

    public static String caesar(String s, int offset) throws Exception {
        String cipher = "";
        for (int i = 0; i < s.length(); i++) {
            char c = s.charAt(i);
            // 是小写字母
            if (c >= 'a' && c <= 'z') {
                if (offset > 0) {
                    // 这里不光根据 offset 进行加密,还添加了该元素的下标进行加密。
                    c += (offset + i) % 26; 
                } else {
                    // 这里不光根据 offset 进行加密,还添加了该元素的下标进行加密。
                    c += (offset - i) % 26; 
                }
                if (c < 'a')
                    c += 26; // 向左超界
                if (c > 'z')
                    c -= 26; // 向右超界
            }
            // 是大写字母
            else if (c >= 'A' && c <= 'Z') {
                if (offset > 0) {
                    // 这里不光根据 offset 进行加密,还添加了该元素的下标进行加密。
                    c += (offset + i) % 26; 
                } else {
                    // 这里不光根据 offset 进行加密,还添加了该元素的下标进行加密。
                    c += (offset - i) % 26; 
                }
                if (c < 'A')
                    c += 26;
                if (c > 'Z')
                    c -= 26;
            }
            cipher += c;
        }
        return cipher;
    }

    public static void main(String args[]) throws Exception {
        String cipher = caesar("Hello", 2);
        String text = caesar(cipher, -2);
        System.out.println("原文:Hello\r\n加密后:" + cipher + "\r\n解密后:" + text);    
    }
}

这里不光根据 offset 偏移进行加密,还加上了字符所在的下标进行混合加密。

输出的结果:

原文:Hello 加密后:Jhpqu 解密后:Hello

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018.05.09 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
维吉尼亚密码及程序实现
凯撒加密 在密码学中,恺撒密码是一种最简单且最广为人知的加密技术。它是一种替换加密的技术,明文中的所有字母都在字母表上向后(或向前)按照一个固定数目进行偏移后被替换成密文。例,当偏移量是3的时候,所有的字母A将被替换成D,B变成E,以此类推。这个加密方法是以恺撒的名字命名的,当年恺撒曾用此方法与其将军们进行联系。恺撒密码通常被作为其他更复杂的加密方法中的一个步骤。恺撒密码还在现代的ROT13系统中被应用。但是和所有的利用字母表进行替换的加密技术一样,凯撒密码的密度是很低的,只需简单地统计字频就可以破译。 凯
三丰SanFeng
2018/01/16
2K0
维吉尼亚密码及程序实现
加密与安全_ 凯撒密码
凯撒密码是一种简单的替换加密技术,也称为移位密码。它是古典密码学中最早的密码之一,得名于古罗马军队领袖凯撒·尤利乌斯(Julius Caesar),据说他曾经使用过这种加密方法。
小小工匠
2024/05/26
2580
加密与安全_ 凯撒密码
单表替换加密
凯撒密码加密时将明文中的每个字母都按照其在字母表中的顺序向后(或向前)移动固定数目(循环移动)得到密文,解密时将密文中的每个字母都按照其在字母表中的顺序向前(或向后)移动固定数目(循环移动)得到明文。
TomatoCool
2023/07/30
3350
加密与安全_探索对称加密算法
对称加密算法是一种加密技术,使用相同的密钥来进行加密和解密数据。在这种算法中,发送方使用密钥将明文(未加密的数据)转换为密文(加密的数据),而接收方使用相同的密钥将密文还原为明文。
小小工匠
2024/05/26
2190
加密与安全_探索对称加密算法
一个简单的加密算法
凯撒加密是一种简单的加密技术。据记载,这是凯撒大帝曾经用来对军事信息进行加密的方法。
老肥码码码
2020/01/17
1.4K0
一个简单的加密算法
基于JAVA的RSA非对称加密算法简单实现
  RSA公开密钥密码体制。所谓的公开密钥密码体制就是使用不同的加密密钥与解密密钥,是一种“由已知加密密钥推导出解密密钥在计算上是不可行的”密码体制。
CodeWwang
2022/08/24
8260
基于JAVA的RSA非对称加密算法简单实现
国密算法,明文、密文、密码、密钥、对称加密、非对称加密简单理解
国密算法是什么? 国密算法是由国家密码局发布,包含SM1、SM2、 SM3、 SM4、 SSF33算法。 国际算法是什么? 国际算法由美国的安全局发布,是现今最通用的商用算法。 密码学中应用最为广泛算法都有哪些? 密码学中应用最为广泛的的三类算法: 1、对称算法(分组密码算法)代表分组密码算法(DES和SM4); 2、非对称算法(公钥密码算法)代表公钥密码算法(RSA和SM2); 3、杂凑算法(摘要算法)代表摘要算法(HAS-256系列和SM3);
zhangjiqun
2024/12/16
2570
国密算法,明文、密文、密码、密钥、对称加密、非对称加密简单理解
加密解密(RSA)非对称加密算法
RSA加解密是一种非对称加密算法,由三位数学家Rivest、Shamir和Adleman于1977年提出。它的概念是基于两个密钥:公钥和私钥。公钥用于加密数据,私钥用于解密数据。
一百减一是零
2024/08/04
2540
懂了!国际算法体系对称算法DES原理
加密领域主要有国际算法和国密算法两种体系。国密算法是国家密码局认定的国产密码算法。国际算法是由美国安全局发布的算法。由于国密算法安全性高等一系列原因。国内的银行和支付机构都推荐使用国密算法。
静儿
2020/11/24
8640
懂了!国际算法体系对称算法DES原理
加密与安全_探索非对称加密算法_RSA算法
加密与安全_探索密钥交换算法(Diffie-Hellman算法) 中我们可以看到,公钥-私钥组成的密钥对是非常有用的加密方式,因为公钥是可以公开的,而私钥是完全保密的,由此奠定了非对称加密的基础。
小小工匠
2024/05/26
1990
非对称加密之RSA是怎么加密的
前几天阿粉刚刚说了这个 MD5 加密的前世今生,因为 MD5 也确实用的人不是很多了,阿粉就不再继续的一一赘述了,今天阿粉想给大家分享的,是非对称加密中的一种,那就是 RSA 加密算法。
Java极客技术
2022/12/04
1.2K0
PKI - 02 对称与非对称密钥算法
对称密钥算法和非对称密钥算法是两种常见的加密技术,它们在加密和解密数据时采用不同的方法。
小小工匠
2024/05/25
1580
PKI - 02 对称与非对称密钥算法
[Java 安全]加密算法
Base64编码 算法简述 定义 Base64内容传送编码是一种以任意8位字节序列组合的描述形式,这种形式不易被人直接识别。 Base64是一种很常见的编码规范,其作用是将二进制序列转换为人类可读的A
静默虚空
2018/01/05
4K0
[Java 安全]加密算法
常用对称加密算法之AES算法-CBC模式
例: 加密 123 =》AES( 123 + key ) =》@# 解密 @# =》AES( key + @#
鲲志说
2025/04/07
2050
常用对称加密算法之AES算法-CBC模式
哈希算法是对称算法还是非对称算法_对称加密和非对称加密原理
作用:对任意一组输入数据进行计算,得到一个固定长度的输出摘要。 哈希算法的目的:为了验证原始数据是否被篡改。 哈希算法最重要的特点就是: 相同的输入一定得到相同的输出; 不同的输入大概率得到不同的输出。
全栈程序员站长
2022/11/01
1.2K0
【说站】凯撒密码python编程简单
凯撒密码是古罗马凯撒大帝为了解密军事情报而使用的算法。将信息中的每个英语文字循环替换为文字表序列中的第三个字符。有一套专门的字母表对应关系。
很酷的站长
2022/11/23
9610
快速了解常用的对称加密算法,再也不用担心面试官的刨根问底
加密算法通常被分为两种:对称加密和非对称加密。其中,对称加密算法在加密和解密时使用的密钥相同;非对称加密算法在加密和解密时使用的密钥不同,分为公钥和私钥。此外,还有一类叫做消息摘要算法,是对数据进行摘要并且不可逆的算法。
万猫学社
2022/04/22
5120
CTF必会-古典密码与常见编码大全(全网最全)
本文属于OneTS安全团队成员flatcc的原创文章,转载请声明出处!本文章仅用于学习交流使用,因利用此文信息而造成的任何直接或间接的后果及损失,均由使用者本人负责,OneTS安全团队及文章作者不为此承担任何责任。
OneTS安全团队
2025/02/07
5000
CTF必会-古典密码与常见编码大全(全网最全)
快速了解常用的非对称加密算法,再也不用担心面试官的刨根问底
加密算法通常被分为两种:对称加密算法和非对称加密算法。其中,对称加密算法在加密和解密时使用的密钥相同;非对称加密算法在加密和解密时使用的密钥不同,分为公钥和私钥。此外,还有一类叫做消息摘要算法,是对数据进行摘要并且不可逆的算法。
万猫学社
2022/04/22
1.6K0
快速了解常用的非对称加密算法,再也不用担心面试官的刨根问底
古典密码-凯撒密码原理以及代码
相传在很久很久以前,有一位皇帝,叫做 尤利乌斯 · 凯撒 为了缩短名字,我们称为凯撒大帝.是在公元前100年左右单身与古罗马,是一名著名的军事统帅.由它发明的密码.叫做凯撒密码
IBinary
2020/05/04
3.5K0
推荐阅读
相关推荐
维吉尼亚密码及程序实现
更多 >
领券
💥开发者 MCP广场重磅上线!
精选全网热门MCP server,让你的AI更好用 🚀
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验