时间戳转换器

在字符串/列表中添加某些数字,然后变成字母

日期:2023-02-16     浏览:39    
【中文标题】在字符串/列表中添加某些数字,然后变成字母【英文标题】:Adding certain numbers together in a string/list then turning then into letters 【发布时间】:2015-11-04 14:46:12 【问题描述】:

目前正在用 Python 进行 Vigenere 密码,我和我班上的许多人都卡在一个方面。

将关键字转换为序数后,我们需要将这些数字添加到消息中以对其进行加密。这是我目前的代码。

Input = input('Enter your message: ')

key = input('Enter the one word key: ')

times = len(Input)//len(key)+1

encryptedKey = (times*key)[:len(Input)]

output = []
for character in Input:
    number = ord(character) - 96
    output.append(number)

outputKey = []
for character in encryptedKey:
      numberKey = ord(character) - 96
      outputKey.append(numberKey)

print(encryptedKey)

print(outputKey)
print(Input)
print(output)

因此,如果输入是'hello',而键是'bye',则关键字将变为'byeby'[2,25,5,2,25],而'hello' 将变为[8,5,12,12,15]。我想不出一种方法来添加第一个 2 和 8,25 和 5,等等。

我试过print(sum(output + outputKey)),但当然只是将所有数字相加,这意味着答案是111。

我还需要将它们转回字母,以便它以加密消息结束。

谢谢!

【问题讨论】:

为什么不 a: for i in len(keyword): 循环? 我怀疑你想要zip... @idjaw 无论如何都不是那个问题的副本。像这样的 Vigenere 密码的重点是模运算,即使 OP 还没有意识到这一点。 【参考方案1】:

你的开始是正确的。您已将消息和密钥转换为数字。

keyphrase = [2,25,5,2,25]
message = [8,5,12,12,15]

现在您需要将它们相加并取模 26,这样您的答案仍然是 a-z。

encrypted = [(keyphrase[i] + message[i])%26 for i in range(len(message))]
>>> encrypted
[10, 4, 17, 14, 14]

现在你需要把它们变成字母:

''.join(chr(c + 96) for c in encrypted)
'jdqnn'

然后你可以通过其他方式恢复消息:

message = [(encrypted[i] - keyphrase[i])%26 for i in range(len(encrypted))]
>>> message
[8, 5, 12, 12, 15]
>>> ''.join(chr(c + 96) for c in message)
'hello'

有点仅供参考,对于计算机密码学,尤其是对于 Python 或 C 之类的语言,通常标准是从 0 开始计数。所以“a”是 0,“b”是 1,等等。你开始1,没关系,只要注意它。

【讨论】:

谢谢,非常有帮助。现在我只需要弄清楚如何确保符号不加密!还在习惯使用 .isalpha! @AnimeDeamon .isalpha() 肯定能带你去你想去的地方。如果您需要我的建议,我不仅会“不加密”符号,还会在加密之前将它们从消息中删除。在任何真正的密码系统中,您都希望对您发送的任何内容进行加密,这意味着要么加密标点符号,要么(在 Vigenere 密码的情况下,它只对字母进行操作)将其排除在外。将它们留在其中但未加密会泄露大量信息。 我的老师说,虽然我理解它,但我必须使它更简单,以便她更容易理解 - 将它放在多行中。我试过了,但它搞砸了我其余的编码。 @AnimeDeamon 因为 cmets 无法显示行格式,如果您将现有内容添加到您的问题中,或者开始一个新问题,它会更容易阅读。 没关系——老师告诉我只要我懂就行——我只需要解释清楚! :)【参考方案2】:

你也可以试试这样的(伪代码):

int j = 0
for int i = 0; i < output.len(); i++
    print output[i] + outputKey[j]
    j++
    if j > outputKey.len()
        j = 0

这样,您无需将数组从 [b, y, e] 扩展到 [b, y, e, b, y] 而是计算一次键并使用其索引根据需要循环其他值。

【讨论】:

相关文章

为啥某些文件的组显示数字(看起来像 ID),而不是字母字符串?

{...为啥某些文件的组显示数字(看起来像ID),而不是字母字符串?【英文标题】:Whydoesthegroupofsomefileshownumber(lookslikeID),notanalphabetstring?为什么某些文件的组显示数字(看起来像ID),而不是字母字符串?【发布时间】:2017-07-1407:0...}

获取以某些字母开头的名称列表[关闭]

{...问题描述】:我需要实现一个函数,该函数将一个名称(字符串)列表作为参数,另一个将字符列表作为参数。该函数应打印出第一个列表中以第二个列表中的字母开头的名称。如果列表为空,则该函数不打印任何内容。这是函...}

Haskell int 列表到字符串

{】Haskellint列表到字符串【英文标题】:HaskellintlisttoString【发布时间】:2011-05-1811:59:35【问题描述】:我想知道是否有一种简单的方法可以将[5,2,10]变成"52a"。在这种情况下,我想将任何>9的数字与相应的字母相关联。提...}

在带有数字的列表中查找具有字母优先级的第一项

{...:2016-06-1201:06:17【问题描述】:假设我有一个包含数字和字符串的列表对象。如果我想检索具有最高字母优先级的第一个字符串项,我该怎么做?这是一个明显不正确的示例尝试,但非常感谢您更正需要更改哪些内容才能达到预...}

leetcode884.两句话中的不常见单词/1342.将数字变成0的操作次数(计算二进制长度统计1的个数)/1763.最长的美好子字符串(分治)(代码片段)

{884.两句话中的不常见单词2022.1.30每日一题题目描述句子是一串由空格分隔的单词。每个单词仅由小写字母组成。如果某个单词在其中一个句子中恰好出现一次,在另一个句子中却没有出现,那么这个单词就是不常见的。...}

将给定字符串的唯一字母添加到列表

{】将给定字符串的唯一字母添加到列表【英文标题】:AdduniquelettersofagivenStringtoaList【发布时间】:2016-03-2217:51:32【问题描述】:我想将字符串的字母添加到列表中,但我只想将每个字母添加一次。例如,如果字符串是“HELLOAMCHRI...}

将 2 个字符转换为字符串

{】将2个字符转换为字符串【英文标题】:Convert2characterintoastring【发布时间】:2020-04-2018:13:09【问题描述】:我需要将二维数组中的两个数字转换为字符,然后将这两个字符变成一个字符串。例如,如果我有[0][0],则数组中的第...}

如何在 Java 字符串中的每个大写字母前添加下划线?

{】如何在Java字符串中的每个大写字母前添加下划线?【英文标题】:HowcanIaddanunderscorebeforeeachcapitalletterinsideaJavaString?【发布时间】:2010-12-0803:33:01【问题描述】:我有一个像“HelloWorldMyNameIsCarl”这样的字符串,我希望它变成像...}

在26个大小写字母(52个),以及9个数字组成的字符列表中,随机生成10个8位密码.(代码片段)

{print(ord(‘A‘))print(ord(‘a‘))print(ord(‘0‘))importrandomSecChar=[]foriinrange(26):SecChar.append(chr(i+ord(‘A‘)));foriinrange(26):SecChar.append(chr(i+ord(‘a‘)));foriinrange(9):SecChar.append(chr(i+o}

以随机顺序搜索包含特定字母的列表中的字符串

{】以随机顺序搜索包含特定字母的列表中的字符串【英文标题】:Searchstringsinlistcontainingspecificlettersinrandomorder【发布时间】:2012-03-1515:27:28【问题描述】:我正在用Python2.7编写代码,其中定义了一个字符串列表。然后我想在这个...}

Copyright ©2021 时间戳转换器 小常识 114pp | 陕ICP备18005036号