加密与安全_ 凯撒密码

这篇具有很好参考价值的文章主要介绍了加密与安全_ 凯撒密码。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

加密与安全_ 凯撒密码,【加密与安全】,安全,java,凯撒密码


Pre

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


概述

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

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

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

加密过程

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

加密与安全_ 凯撒密码,【加密与安全】,安全,java,凯撒密码

解密过程

  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();
    }
}

加密与安全_ 凯撒密码,【加密与安全】,安全,java,凯撒密码


字母频率分析攻击

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

步骤

  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();
    }
}

我们对每个出现频率的字母都尝试解密文本,并输出每个偏移量对应的解密文本
加密与安全_ 凯撒密码,【加密与安全】,安全,java,凯撒密码

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

加密与安全_ 凯撒密码,【加密与安全】,安全,java,凯撒密码


小结

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

加密与安全_ 凯撒密码,【加密与安全】,安全,java,凯撒密码文章来源地址https://www.toymoban.com/news/detail-840241.html

到了这里,关于加密与安全_ 凯撒密码的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 凯撒密码-java

    在 密码学 中, 恺撒密码 (英语:Caesar cipher),或称 恺撒加密 、 恺撒变换 、 变换加密 ,是一种最简单且最广为人知的加密技术。它是一种替换加密的技术, 明文 中的所有字母都在 字母表 上向后(或向前)按照一个固定数目进行偏移后被替换成 密文 。例如,当偏移量

    2024年02月07日
    浏览(36)
  • Java安全——基于密码的加密

    基于密码的加密 基于密码加密和SSL加密的区别 密码加密可以数据和密码分离传输 SSL只限于在套接字空间传输的数据进行加密 SSL和密码加密 密码加密是指通过算法将原始信息转换成密文,只有知道相应密钥的人才能解密。Java中常用的密码加密算法包括MD5、SHA、AES、DES等,可

    2024年02月13日
    浏览(43)
  • 凯撒密码——密码学

      代码如下:

    2024年02月02日
    浏览(34)
  • 移位密码(凯撒密码)

    移位密码是一种简单的加密方法,它通过将明文中的每个字符按照一定规则向左或向右移动若干位来生成密文。移位密码通常使用 偏移量 来确定每个字符移动的位数。 1. 移位加密 移位加密算法将明文中的每个字符按照一定规则向左或向右移动若干位来生成密文。具体步骤如

    2024年02月09日
    浏览(36)
  • [密码学入门]凯撒密码(Caesar Cipher)

    非常推荐《密码编码学与网络安全--原理与实践(第八版)》这本书。 密码体质五元组:P,C,K,E,D P,plaintext,明文空间 C,ciphertext,密文空间 K,key,密钥空间 E,encrypt,加密算法 D,decrypt,解密算法 单表代换 单表:英文26字母的顺序 代换:替换为别的字母并保证解密的唯一

    2024年02月09日
    浏览(34)
  • C# 实现 凯撒密码

            凯撒密码(Caesar cipher)是一种简单的替换式密码,它通过将明文中的每个字母在字母表中向后(或向前)按照一个固定数目进行偏移后被替换成密文。这种加密方式是以罗马共和时期恺撒的名字命名的,据说恺撒曾用此方法对其重要的军事信息进行加密。     

    2024年01月22日
    浏览(91)
  • 凯撒密码(Python)

    一、凯撒密码是什么? 凯撒密码是一种非常古老的加密方法,最初由古罗马的凯撒大帝使用。凯撒大帝将纸条卷起后,按照字母表顺序向后移动一定的位数,然后再写下加密后的字母,这样其他人就无法直接读取他的信息。 凯撒密码(移位密码):是一种替换加密,明文中的

    2024年02月05日
    浏览(41)
  • c++ 凯撒密码

            凯撒密码(Caesar Cipher)是一种简单的替代加密技术,以罗马大帝凯撒·尤利乌斯·凯撒(Julius Caesar)的名字命名。它通过将每个字母按照字母表向后移动固定数量的位置来进行加密。 示例一: /**  * @file caesar_cipher.cpp  * @brief Implementation of [Caesar cipher](https://en.wi

    2024年02月02日
    浏览(47)
  • Python学习38:凯撒密码——解密

    类型: 字符串 ‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬ 描述

    2024年02月06日
    浏览(33)
  • 密码学系列4-选择密文安全,同态加密安全性

    本章将介绍Cramer-Shoup加密方案,并证明其安全性。最后讨论了同态加密方案的安全性证明 一、Cramer-Shoup加密 密钥生成 1.定义群 G G G ,群的阶为 q q q ,选取群的生成元

    2024年04月26日
    浏览(32)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包