侧边栏壁纸
博主头像
Easy to understand and humorous

行动起来,活在当下

  • 累计撰写 39 篇文章
  • 累计创建 4 个标签
  • 累计收到 2 条评论

目 录CONTENT

文章目录

编码技术 Kaiser

fengyang
2025-05-08 / 1 评论 / 1 点赞 / 18 阅读 / 0 字 / 正在检测是否收录...
温馨提示:
部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

在密码学中,恺撒密码是一种最简单并且最广为人知的加密技术。

它是一种替换加密的技术,明文中的所欲字母都在字母表上向后(或向前)按照一个固定的数目进行偏移后被替换成密文。

例如:当偏移量是3的时候,所有的字母A将被替换成D,B变成E,以此类推。

这个加密方法是以恺撒的名字命名的,当年恺撒曾用此方法与其将军们进行联系。

恺撒密码通常被座位其他更复杂的加密方法中的一个步骤。

Kaiser

加解密代码样例

Java

/**
 * 使用凯撒加密方式加密数据
 *
 * @param orignal :原文
 * @param key     :密钥
 * @return :加密后的数据
 */
private static String encryptKaiser(String orignal, int key) {
    // 将字符串转为字符数组
    char[] chars = orignal.toCharArray();
    StringBuilder sb = new StringBuilder();
    // 遍历数组
    for (char aChar : chars) {
        // 获取字符的ASCII编码
        int asciiCode = aChar;
        // 偏移数据
        asciiCode += key;
        // 将偏移后的数据转为字符
        char result = (char) asciiCode;
        // 拼接数据
        sb.append(result);
    }

    return sb.toString();
}

/**
 * 使用凯撒加密方式解密数据
 *
 * @param encryptedData :密文
 * @param key           :密钥
 * @return : 源数据
 */
private static String decryptKaiser(String encryptedData, int key) {
    // 将字符串转为字符数组
    char[] chars = encryptedData.toCharArray();
    StringBuilder sb = new StringBuilder();
    // 遍历数组
    for (char aChar : chars) {
        // 获取字符的ASCII编码
        int asciiCode = aChar;
        // 偏移数据
        asciiCode -= key;
        // 将偏移后的数据转为字符
        char result = (char) asciiCode;
        // 拼接数据
        sb.append(result);
    }

    return sb.toString();
}

Rust

caesar_cipher 函数用于加密文本,而 caesar_decipher 函数用于解密文本。加密和解密的逻辑是相似的,只是解密时使用的位移是加密位移的补数(即 26 - shift)。

fn caesar_cipher(text: &str, shift: usize) -> String {
    let alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
    let mut result = String::new();

    for char in text.chars() {
        if char.is_ascii_alphabetic() {
            let alphabet_index = alphabet.find(char).unwrap();
            let new_index = (alphabet_index + shift) % 26;
            let new_char = alphabet.chars().nth(new_index).unwrap();
            result.push(new_char);
        } else {
            result.push(char);
        }
    }

    result
}

fn caesar_decipher(text: &str, shift: usize) -> String {
    let shift_for_decipher = 26 - shift;
    caesar_cipher(text, shift_for_decipher)
}

fn main() {
    let text = "Hello, World!";
    let shift = 3;

    let encrypted = caesar_cipher(text, shift);
    println!("Encrypted: {}", encrypted);

    let decrypted = caesar_decipher(&encrypted, shift);
    println!("Decrypted: {}", decrypted);
}

对恺撒加密的破解

  1. 将明文字母的出现频率与密文字母的频率相比较的过程
  2. 通过分析每个符号出现的频率而轻易地破译代换式密码
  3. 在每种语言中,冗长的文章中的字母表现出一种可对之进行分辨的频率。
  4. e是英语中最常用的字母,其出现频率为八分之一
1

评论区