加密与安全_ 凯撒密码

文章目录

  • Pre
  • 概述
  • Code 实现 凯撒密码
  • 字母频率分析攻击
    • Code解密凯撒密码
  • 小结

在这里插入图片描述


Pre

PKI - 02 对称与非对称密钥算法


概述

凯撒密码是一种简单的替换加密技术,也称为移位密码。它是古典密码学中最早的密码之一,得名于古罗马军队领袖凯撒·尤利乌斯(Julius Caesar),据说他曾经使用过这种加密方法。

恺撒密码,也称为恺撒加密或恺撒变换,是一种最古老且最简单的密码之一。它的原理很简单,就是通过将明文中的每个字母按照字母表顺序向后(或向前)移动固定的位置来进行加密。这个固定的位置就是密钥,通常用一个整数来表示,称为偏移量。

例如,当偏移量为3时,明文中的字母A将被加密为D,B被加密为E,以此类推。如果偏移量是负数,则向前移动相应的位置。这种方法相当于在字母表上进行循环移位。

加密过程

  1. 确定偏移量(密钥)。
  2. 对于要加密的明文中的每个字母,按照偏移量进行移位。
  3. 输出密文。

在这里插入图片描述

解密过程

  1. 知道加密时使用的偏移量。
  2. 对于密文中的每个字母,按照偏移量的负值进行移位。
  3. 输出明文。

示例

假设明文为:“HELLO”,偏移量为3。

  • 加密:H + 3 = K,E + 3 = H,L + 3 = O,L + 3 = O,O + 3 = R
  • 密文为:“KHOOR”

安全性

恺撒密码的安全性非常低,因为它只有26种可能的密钥(偏移量),攻击者可以很容易地通过穷举法来破解。因此,它更多地被用于教学和娱乐,而不是实际的安全通信中。

应用

恺撒密码虽然安全性低,但在教学、编程练习以及简单的加密需求中仍有一定的应用价值。


Code 实现 凯撒密码

public class KaiserDemo {
    public static void main(String[] args) {
        // 定义原文
        String input = "Hello Artisan";
        // 把原文右边移动3位
        int key = 3;
        // 凯撒加密
        String s = encrypt(input, key);
        System.out.println("加密 " + s);
        String s1 = decrypt(s, key);
        System.out.println("明文 " + s1);
    }

    /**
     * 解密
     *
     * @param s   密文
     * @param key 密钥
     * @return
     */
    public static String decrypt(String s, int key) {
        char[] chars = s.toCharArray();
        StringBuilder sb = new StringBuilder();
        for (char aChar : chars) {
            int b = aChar;
            // 偏移数据
            b -= key;
            char newb = (char) b;
            sb.append(newb);
        }
        return sb.toString();
    }

    /**
     * 加密
     *
     * @param input 原文
     * @return
     */
    public static String encrypt(String input, int key) {
        // 抽取快捷键 ctrl + alt + m
        // 把字符串变成字节数组
        char[] chars = input.toCharArray();
        StringBuilder sb = new StringBuilder();
        for (char aChar : chars) {
            int b = aChar;
            // 往右边移动3位
            b = b + key;
            char newb = (char) b;
            sb.append(newb);
        }
        return sb.toString();
    }
}

在这里插入图片描述


字母频率分析攻击

字母频率分析是一种破译凯撒密码的常见方法。它利用了自然语言中字母的分布特征,即某些字母在文本中出现的频率比其他字母更高。

步骤

  1. 收集密文。
  2. 统计密文中每个字母出现的次数,得到各个字母的频率。
  3. 将频率从高到低排序。
  4. 将排序后的频率与自然语言中字母的频率进行比较,找到最可能对应的字母。
  5. 推断偏移量,并进行解密。

举例

假设有一段密文为:“WKLQJ LV NHHS”。

  1. 统计各个字母出现的次数:

    • W: 1次
    • K: 1次
    • L: 1次
    • Q: 1次
    • J: 1次
    • V: 1次
    • N: 1次
    • H: 2次
    • S: 1次
  2. 按频率排序:H > W, K, L, Q, J, V, N, S

  3. 与自然语言中英文字母的频率进行比较,发现"H"的频率较高,可能对应原文中的"E"。

  4. 推断偏移量为3。

  5. 解密密文:“WKLQJ LV NHHS” -> “THINK IS MEET”

安全性
凯撒密码的安全性很低,因为它只有26种可能的密钥(偏移量),而且容易受到字母频率分析等简单攻击的破解。

Code解密凯撒密码


import java.util.HashMap;
import java.util.Map;

/**
 * @author 小工匠
 * @version 1.0
 * @mark: show me the code , change the world
 */
public class CaesarCipherBreaker {

    public static void main(String[] args) {
        String ciphertext = "Khoor#Duwlvdq";
        crackCaesarCipher(ciphertext);
    }

    // 字母频率分析破解凯撒密码
    public static void crackCaesarCipher(String ciphertext) {
        // 统计密文中每个字母出现的次数
        Map<Character, Integer> frequencies = new HashMap<>();
        for (char c : ciphertext.toCharArray()) {
            if (Character.isLetter(c)) {
                char uppercaseChar = Character.toUpperCase(c);
                frequencies.put(uppercaseChar, frequencies.getOrDefault(uppercaseChar, 0) + 1);
            }
        }

        // 将统计结果按出现次数从高到低排序
        frequencies.entrySet().stream()
                .sorted((e1, e2) -> Integer.compare(e2.getValue(), e1.getValue()))
                .forEach(entry -> {
                    char letter = entry.getKey();
                    int frequency = entry.getValue();
                    System.out.println(letter + ": " + frequency);
                    int offset = letter - 'E';
                    if (offset < 0) {
                        offset += 26;
                    }
                    String decryptedText = decryptCaesarCipher(ciphertext, offset);
                    System.out.println("Decrypted Text with offset " + offset + ": " + decryptedText);
                });
    }

    // 凯撒密码解密
    public static String decryptCaesarCipher(String ciphertext, int offset) {
        StringBuilder plaintext = new StringBuilder();
        for (char c : ciphertext.toCharArray()) {
            if (Character.isLetter(c)) {
                char baseChar = Character.isLowerCase(c) ? 'a' : 'A';
                int index = (c - baseChar - offset + 26) % 26;
                plaintext.append((char) (baseChar + index));
            } else {
                plaintext.append(c);
            }
        }
        return plaintext.toString();
    }
}

我们对每个出现频率的字母都尝试解密文本,并输出每个偏移量对应的解密文本
在这里插入图片描述

发现我们可以读懂,解密成功

在这里插入图片描述


小结

尽管凯撒密码很容易理解和实现,但由于它的简单性,它并不安全,容易受到字母频率分析等攻击。因此,现代加密通常不再使用凯撒密码,而是使用更加复杂的加密算法来保护数据的安全。

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/428863.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

express+mysql+vue,从零搭建一个商城管理系统7--token

提示&#xff1a;学习express&#xff0c;搭建管理系统 文章目录 前言一、安装jsonwebtoken二、新建config/jwt.js三、修改models/user.js四、修改routes下的user.js五、修改index.js六、Api新建user/queryUserList接口七、token验证失败示例总结 前言 需求&#xff1a;主要学习…

Python爬虫副业真的可行吗?

首先回答你&#xff0c;是可行的&#xff0c;python爬虫能当副业&#xff0c;副业的方式比较多&#xff0c;等下我会讲几种。 那学到哪个层次可以接单呢&#xff1f;主要看你是接什么样的单&#xff0c;爬一些资料&#xff0c;视频这种简单的学一两个月就没什么问题&#xff0…

(unity学习)一些效果的学习

一、学习视频 【Unity教程】零基础带你从小白到超神 二、效果实现 三、问题解决 Unity 点击UI与点击屏幕冲突的解决方案 关于unity UI界面操作与场景内操作不冲突问题

TCPDump 使用教程

每次服务器网络不通的时候&#xff0c;总会听到一个声音&#xff0c;你去抓包啊&#xff0c;那这里就来介绍下TCPDump&#xff0c;一款强大的网络分析工具&#xff0c;可以捕获网络上的数据包&#xff0c;并进行分析。这款工具在网络管理员和安全专家中非常受欢迎。 一、安装 …

进程间通信之消息队列及共享内存

1.IPC对象: 内存文件 1.ipcs 查看系统重的消息队列、共享内存、信号灯的信息 2.ipcrm 删除消息队列、共享内存、信号灯 ipcrm -Q/-M/-S key ipcrm -q/-m/-s 消息队列ID/共享内存ID/信号灯ID 消息队列&#xff1a; 3.操作流程: …

【论文阅读】High-Resolution Image Synthesis with Latent Diffusion Model

High-Resolution Image Synthesis with Latent Diffusion Model 引用&#xff1a; Rombach R, Blattmann A, Lorenz D, et al. High-resolution image synthesis with latent diffusion models[C]//Proceedings of the IEEE/CVF conference on computer vision and pattern re…

智慧城市的创新实践:全球案例分享

一、引言 在全球化和数字化的时代&#xff0c;智慧城市已经成为城市发展的前沿趋势。智慧城市运用先进的信息技术&#xff0c;如大数据、物联网、云计算和人工智能等&#xff0c;提升城市管理的智能化水平&#xff0c;增强公共服务效率&#xff0c;优化居民生活质量。本文将通…

AI-RAN联盟在MWC24上正式启动

AI-RAN联盟在MWC24上正式启动。它的logo是这个样的&#xff1a; 2月26日&#xff0c;AI-RAN联盟&#xff08;AI-RAN Alliance&#xff09;在2024年世界移动通信大会&#xff08;MWC 2024&#xff09;上成立。创始成员包括亚马逊云科技、Arm、DeepSig、爱立信、微软、诺基亚、美…

技术面没过,居然是因为没用过Pytest框架

01 概述 pytest是一个非常成熟的全功能的Python测试框架&#xff0c;主要特点有以下几点&#xff1a; 简单灵活&#xff0c;容易上手&#xff0c;文档丰富&#xff1b; 支持参数化&#xff0c;可以细粒度地控制要测试的测试用例&#xff1b; 能够支持简单的单元测试和复杂的…

相机,棱镜和光场

一、成像方法 Imaging Synthesis Capture 1.Synthesis&#xff08;图形学上&#xff09;合成&#xff1a;比如之前学过的光线追踪或者光栅化 2.Capture&#xff08;捕捉&#xff09;&#xff1a;把真实世界存在的东西捕捉成为照片 二、相机 1.小孔成像 利用小孔成像的相…

MES系统在离散制造企业中的功能解析

随着信息技术的快速发展和制造业的转型升级&#xff0c;MES在离散制造企业中的作用日益凸显。MES系统不仅提高了生产效率和产品质量&#xff0c;还优化了资源配置&#xff0c;增强了企业的市场竞争力。 一、生产管理功能 MES系统能够实时监控生产现场的各种数据&#xff0c;包…

【SQL】608. 树节点(流控制语句 CASE + IF语句)

前述 知识点推荐学习&#xff1a; sql中的 IF 条件语句的用法 MySQL&#xff1a;if语句、if…else语句、case语句&#xff0c;使用方法解析 题目描述 leetcode 题目&#xff1a;608. 树节点 思路 关键点&#xff1a;如何确定有没有子节点 根节点&#xff1a;父节点为空内节…

FreeRTOS任务管理(创建、删除、挂起、恢复)

目录 一、任务概念 二、系统启动与空闲任务 三、任务创建 四、任务删除 五、任务挂起 六、任务恢复&#xff08;普通模式和中断模式&#xff09; 七、任务管理编程实战 一、任务概念 1、任务的基本概念 从系统的角度看&#xff0c;任务是竞争系统资源的最小运行单元 …

Flutter(三):Stack、Positioned、屏幕相关尺寸、Navigator路由跳转

页面尺寸 通知栏高度&#xff1a;MediaQuery.of(context).padding.top顶部导航高度&#xff1a;kToolbarHeight底部导航高度&#xff1a;kBottomNavigationBarHeight屏幕宽&#xff1a;MediaQuery.of(context).size.width屏幕高&#xff1a;MediaQuery.of(context).size.height…

基于STM32制作的示波器(可对任意信号进行描点)

基于STM32制作的示波器&#xff08;可对任意信号进行描点&#xff09; 注意&#xff1a;用的屏幕是TFT-LCD&#xff08;MCU 屏&#xff09;正点原子同款屏幕 液晶显示器&#xff0c;即 Liquid Crystal Display&#xff0c;利用了液晶导电后透光性可变的特性&#xff0c;配合显…

2024洗地机选购攻略 | 洗地机好用吗?洗地机如何挑选?

在众多清洁工具中&#xff0c;洗地机以其卓越的清洁能力和便捷的操作方式&#xff0c;获得了广泛关注。2024年&#xff0c;市场上涌现出众多品牌的洗地机&#xff0c;但哪些品牌的洗地机值得推荐呢&#xff1f;在这里&#xff0c;我们将详细探讨几个备受好评的洗地机品牌&#…

Fisher矩阵与自然梯度法

文章目录 Fisher矩阵及自然梯度法Fisher矩阵自然梯度法总结参考链接 Fisher矩阵及自然梯度法 自然梯度法相比传统的梯度下降法具有以下优势&#xff1a; 更好的适应性&#xff1a;自然梯度法通过引入黎曼流形上的梯度概念&#xff0c;能够更好地适应参数空间的几何结构。这使…

向上生长笔记

第一章 成为一个很厉害的人(持续输入&#xff0c;反复练习) 为什么要学习及如何学习 1、自毁趋势(熵增)&#xff0c;故需要能量输入(负熵流) //引申&#xff1a;水往低处流是趋势&#xff0c;学习是逆趋势。 2、持续输入能量&#xff08;物质和信息&#xff09;&#xff0c;…

BUUCTF---[ACTF2020 新生赛]BackupFile1

1.题目描述 2.题目提示backup file &#xff0c;是备份文件的意思。点开链接&#xff0c;页面提示 3.查看源码没有什么有用信息&#xff0c;也没有登录界面&#xff0c;所以也不会用到蚁剑链接来找备份文件&#xff0c;所以大概率就是通过构造playload来查找备份文件。 4.备份…

vue+element ui上传图片到七牛云服务器

本来打算做一个全部都是前端完成的资源上传到七牛云的demo&#xff0c;但是需要获取token&#xff0c;经历了九九八十一难&#xff0c;最终还是选择放弃&#xff0c;token从后端获取&#xff08;springboot&#xff09;。如果你们有前端直接能解决的麻烦记得私我哦&#xff01;…
最新文章