暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

信息加密系列 | 阿特巴希密码多语言实现

左羊公社 2023-03-15
179
怪诞小镇第一季第七集,侵删
解密前
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"));
    }
}

Java

在实现中,先将输入字符串转换为小写字母,并去除非字母的字符,然后通过遍历每个字母,将字母在字母表中进行反转,并构造输出字符串。

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) + 97for c in input_str)

    return output

print(atbash_cipher('abc'))

在使用Python实现时,首先将输入字符串全部小写,并将空格、标点和数字删除。然后通过列表推导式,对每个字符进行反转,并构造输出字符串。

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包中的函数,将非字母的字符删除。

Golang

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;
            margin10px 0;
            padding5px;
            border1px solid #ccc;
            border-radius5px;
            width300px;
            max-width100%;
         }
      
</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

感谢你的观看,YES!
题图 | 图片遵循 CC0 许可协议

文章转载自左羊公社,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论