当前位置: 首页 > 知识库问答 >
问题:

如何在Perl中为凯撒密码分配字母表中的字母?

后学
2023-03-14

我写了一个程序,对字母表中字母对应的数字进行加密和解密,但我如何做到当我要求输入时,我将每个字母分配给它的数字,然后进行操作,打印信息的加密和解密,而不需要几行代码?这是我的程序:

print "Caesar's Cipher\n\n";
print "Reference:\n\n";
print "A   B   C   D   E   F   G   H   I   J   K   L    M\n";
print "0   1   2   3   4   5   6   7   8   9   10  11   12\n\n";
print "N   O   P   Q   R   S   T   U   V   W   X   Y    Z\n";
print "13  14  15  16  17  18  19  20  21  22  23  24   25\n";
print "\nEnter a Message (User numbers separated by space):\n";
$string = <>; 

@sarray = split(" ",$string);

foreach $x (@sarray){
    if ($x >=0 && $x <= 25){
        $x = ($x+3)%26;
    } else {
        print "Entered incorrect message.\n"; 
        die;
    }
}
print "\nEncryption: \n";
print "@sarray\n";

foreach $x (@sarray){
    if ($x >=0 && $x <= 25){
        $x = ($x-3)%26;
    } else {
        print "Entered incorrect message.\n"; 
        die;
    }
}

print "Decryption: \n";
print "@sarray\n";

我想能够只是输入一些类似“你好”,然后它将加密和解密的消息。

共有1个答案

朱海超
2023-03-14

你必须考虑大小写,数字,加上空格字符和标点符号。目前您只处理大写的alpha。您需要一个哈希将字符映射到数字,另一个哈希将字符映射到数字。

$inputChar = character to be encoded
$charset = " ABCDEFGHI...Zabcdef...z0123456789!@#$%^&*...";
$code = index($charset,$char);
# encode here as in your example using length($charset) instead of 26
$outputChar = substr($charset,$code,1);

将此逻辑应用于邮件中的所有字符以构建加密邮件。

 类似资料:
  • 基本上,我必须创建一个凯撒密码,它只是用一个int'k'以外的字母替换给出的每个字母。这需要2个命令行参数:“./caesar”和“k”,它们由用户提供。它工作得很好;但有一个问题: 它将“Barfoo”加密为“Eduirr”,使用3作为正确的密钥;将“Barfoo”加密为“Fevjss”,使用4作为正确的密钥 但是它不是用65作为密钥将“barfoo”加密为“onesbb”,而是将其加密为“oo

  • 因此,目前我的凯撒密码程序运行良好,每当我使用小写字母。但是,当我用大写输入一个单词或短语时,我想让它工作。这是我现在有的代码。希望你们能帮我完成这件事。 def encrypt(消息,距离):“”将获取消息并将其旋转到距离,以创建加密消息“” def decrypt(消息,距离):“”“将解密上面的消息”“” def binaryConversion(消息):“”“将把单词转换成二进制代码”“

  • 当前方案: 我确实得到了输出,但有一些加密错误。问题是,由于代码行在彼此后面运行,已经转换的字母会再次转换。 例如:字母“A”被加密/转换为“R”。当程序到达字母“R”时,该字母再次被加密/转换,最终变成“X”,在代码的后面被转换为“U”。这几乎发生在每封信,然后我最终得到一个加密的文本,我永远无法解密。 有什么方法可以同时替换所有的字母,或者你会简单地建议我使用另一个函数吗?

  • 我目前正在写一个凯撒密码程序在C#为我的任务,我有一个问题。 我使用一个数组来完成这个任务,在这个数组中,我存储了整个字母表,并声明了一个由数组中的字符索引定义的移位变量--这是一个for循环的迭代。移位计算在foreach循环中完成,该循环从文本文件中读取的字符串中提取字符。Foreach循环包含在for循环中,该循环迭代输出每个可能的移位。 然而,问题是,当我试图通过shift变量的值访问数组

  • 我需要编写一个python、hacker和wow这些单词的加密文本,并且使用不包括使用RAW_INPUT的python中的凯撒密码,距离为3。这是我到目前为止,但我不断得到一个错误消息,我不知道如何修复它。