恺撒加密
2024年11月12日约 675 字大约 2 分钟
第一节:恺撒加密
在密码学中,恺撒密码是一种最简单并且最广为人知的加密技术。
它是一种替换加密的技术,明文中的所欲字母都在字母表上向后(或向前)按照一个固定的数目进行偏移后被替换成密文。
例如:当偏移量是3的时候,所有的字母A将被替换成D,B变成E,以此类推。
这个加密方法是以恺撒的名字命名的,当年恺撒曾用此方法与其将军们进行联系。
恺撒密码通常被座位其他更复杂的加密方法中的一个步骤。
加解密代码样例
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);
}
对恺撒加密的破解
- 将明文字母的出现频率与密文字母的频率相比较的过程
- 通过分析每个符号出现的频率而轻易地破译代换式密码
- 在每种语言中,冗长的文章中的字母表现出一种可对之进行分辨的频率。
- e是英语中最常用的字母,其出现频率为八分之一