
解密前
kzkvi qzn wrkkvi hzbh: "zfftsdcjstzwhzwfs!"
解密后
PAPER JAM DIPPER SAYS: "AUUGHWXQHGADSADUH!"
小彩蛋
zgyzhs droo yv ivkozxvw yb z1a26 rm gsv mvcg yolt
简介
阿特巴希(Atbash)密码是一种简单的古典密码,实现方法很容易,只需要反转字母表顺序即可。比如,字母A变为Z,字母B变为Y,字母C变为X,以此类推。
阿特巴希密码的加密规则非常简单:将明文中的每个字母在字母表中反转,即将A变成Z,B变成Y,C变成X,以此类推。这样,阿特巴希密码在加密时不需要任何密钥,更不需要对原文进行划分,仅仅只是将原文的字母表反转即可。
JAVA实现
下面是阿特巴希密码的JAVA实现:
public class AtbashCipher {
public static String atbashCipher(String input) {
// 将输入字符串全部小写,并将空格、标点和数字删除
input = input.toLowerCase().replaceAll("[^A-Za-z]", "");
StringBuilder output = new StringBuilder();
for (char c : input.toCharArray()) {
// 将字母在字母表中进行反转
char newChar = (char) ('a' + ('z' - c));
output.append(newChar);
}
return output.toString();
}
public static void main(String[] args) {
System.out.println(AtbashCipher.atbashCipher("abc"));
}
}

在实现中,先将输入字符串转换为小写字母,并去除非字母的字符,然后通过遍历每个字母,将字母在字母表中进行反转,并构造输出字符串。
Python代码实现
下面是使用Python编写的阿特巴希密码加密程序:
def atbash_cipher(input_str):
# 将输入字符串全部小写,并将空格、标点和数字删除
input_str = ''.join(c for c in input_str.lower() if c.isalpha())
output = ''.join(chr(122 - ord(c) + 97) for c in input_str)
return output
print(atbash_cipher('abc'))
在使用Python实现时,首先将输入字符串全部小写,并将空格、标点和数字删除。然后通过列表推导式,对每个字符进行反转,并构造输出字符串。

Golang代码实现
下面是使用Golang编写的阿特巴希密码加密程序:
package main
import (
"fmt"
"unicode"
)
func atbashCipher(input string) string {
// 将输入字符串全部小写,并将空格、标点和数字删除
input = removeNonAlpha(input)
output := ""
for _, char := range input {
// 将字母在字母表中进行反转
newChar := rune(122 - int(char) + 97)
output += fmt.Sprintf("%c", newChar)
}
return output
}
func removeNonAlpha(s string) string {
var result []rune
for _, r := range s {
if unicode.IsLetter(r) {
result = append(result, r)
}
}
return string(result)
}
func main() {
input := "abc"
output := atbashCipher(input)
fmt.Println(output)
}
在使用Golang实现时,首先对输入字符串进行去除非字母的字符。然后通过遍历每个字母,将字母在字母表中进行反转,并构造输出字符串。实现过程中,用到了unicode包中的函数,将非字母的字符删除。

JavaScript语言实现
下面是使用JavaScript编写的阿特巴希密码加密程序,并附带HTML页面展示代码:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Atbash Cipher</title>
<script>
function atbashCipher(input) {
// 将输入字符串全部小写,并将空格、标点和数字删除
input = input.toLowerCase().replace(/[^a-z]/g, "");
var output = "";
for (var i = 0; i < input.length; i++) {
// 将字母在字母表中进行反转
var charCode = input.charCodeAt(i);
var newChar = String.fromCharCode(122 - charCode + 97);
output += newChar;
}
return output;
}
function encrypt() {
var input = document.getElementById("input").value;
var output = atbashCipher(input);
document.getElementById("output").value = output;
}
function clearFields() {
document.getElementById("input").value = "";
document.getElementById("output").value = "";
}
</script>
<style>
input[type="text"], textarea {
display: block;
margin: 10px 0;
padding: 5px;
border: 1px solid #ccc;
border-radius: 5px;
width: 300px;
max-width: 100%;
}
</style>
</head>
<body>
<h1>Atbash Cipher</h1>
<h2>阿特巴希密码</h2>
<label for="input">输入:</label>
<input type="text" id="input">
<br />
<label for="output">输出:</label>
<textarea id="output" readonly></textarea>
<br />
<button onclick="encrypt()">加/解密</button>
<button onclick="clearFields()">清空</button>
</body>
</html>
在使用JavaScript实现时,首先对输入字符串进行去除非字母的字符。然后通过遍历每个字母,将字母在字母表中进行反转,并构造输出字符串。
还附有一个简单的HTML页面,通过输入框和按钮来实现输入及输出,方便用户使用。用户输入字符串后,单击“加解密”按钮,程序会将输入字符串加密后输出到输出框内。单击“清空”按钮可以清除输入框和输出框。

结语
阿特巴希密码虽然简单,但由于其加密方法单一、易于通过暴力破解破解,所以一般不被用来进行安全加密。不过,在实际应用中,可以将阿特巴希密码与其他密码技术结合使用,作为加密算法中的一部分。
参考文献:
1. 百度百科 . 阿特巴希密码 . https://baike.baidu.com/item/%E9%98%BF%E7%89%B9%E5%B7%B4%E5%B8%8C%E5%AF%86%E7%A0%81/22764734?fr=aladdin
2. Bilibili . 安迪视频 . 【怪诞小镇】#7第七集彩蛋,细节,密码与解析(上·梅宝的对手) . https://www.bilibili.com/video/BV1DE411d7Vh/?spm_id_from=333.788&vd_source=ba50ab08f80d173365b7101b8b4e2379
3. 知乎 . 幻仔牛奶 . 怪诞小镇中都有哪些彩蛋和谜题 . https://www.zhihu.com/tardis/sogou/ans/92182104




