首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Python -尝试编写不忽略空格的vigenere密码

Vigenere密码是一种多表密码,它使用一个关键词和一个明文来生成密文。Python是一种高级编程语言,它具有简洁、易读、易学的特点,非常适合用于编写Vigenere密码算法。

Vigenere密码是基于字母表的替换密码,它通过将明文中的每个字母按照关键词中的字母顺序进行移位来生成密文。与传统的凯撒密码不同,Vigenere密码使用了一个关键词作为移位规则,使得密码更加复杂和安全。

下面是一个Python实现的Vigenere密码算法,它不会忽略空格:

代码语言:txt
复制
def vigenere_encrypt(plaintext, key):
    ciphertext = ""
    key_index = 0
    for char in plaintext:
        if char.isalpha():
            shift = ord(key[key_index % len(key)].lower()) - ord('a')
            if char.isupper():
                ciphertext += chr((ord(char) - ord('A') + shift) % 26 + ord('A'))
            else:
                ciphertext += chr((ord(char) - ord('a') + shift) % 26 + ord('a'))
            key_index += 1
        else:
            ciphertext += char
    return ciphertext

def vigenere_decrypt(ciphertext, key):
    plaintext = ""
    key_index = 0
    for char in ciphertext:
        if char.isalpha():
            shift = ord(key[key_index % len(key)].lower()) - ord('a')
            if char.isupper():
                plaintext += chr((ord(char) - ord('A') - shift) % 26 + ord('A'))
            else:
                plaintext += chr((ord(char) - ord('a') - shift) % 26 + ord('a'))
            key_index += 1
        else:
            plaintext += char
    return plaintext

plaintext = "Hello, World!"
key = "key"

ciphertext = vigenere_encrypt(plaintext, key)
print("密文:", ciphertext)

decrypted_text = vigenere_decrypt(ciphertext, key)
print("解密后的明文:", decrypted_text)

这段代码中,vigenere_encrypt函数用于加密明文,vigenere_decrypt函数用于解密密文。它们都接受明文/密文和关键词作为输入,并返回加密后的密文/解密后的明文。

Vigenere密码的优势在于它相对于凯撒密码更加复杂和安全,因为它使用了一个关键词作为移位规则,使得密码更难破解。Vigenere密码适用于需要简单加密通信内容的场景,例如个人通信、保密文件传输等。

腾讯云提供了多种云计算相关产品,其中包括云服务器、云数据库、云存储等。您可以通过访问腾讯云官方网站(https://cloud.tencent.com/)了解更多关于这些产品的详细信息和使用方法。

请注意,以上答案仅供参考,实际情况可能因为技术发展和产品更新而有所变化。建议在实际使用时参考官方文档或咨询相关专业人士。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

这个被忽略细节,是编写优秀 Python 代码必经之路

Python 中数据类型问题 Python是一种动态类型编程语言,变量类型是在运行时分配,无需在赋值之前定义特定类型。...如果我们输入整数,就会得到一个整数 如果传入浮点数,我们得到一个浮点数 如果传入字符串,我们得到一个字符串 如果我们传入列表,我们得到一个列表 Python并不在乎你传入a和b参数。...类型提示介绍 在 Python 中,类型提示是可选。如果不使用它们,Python 也能正常运行。然而,对于其他开发者来说,类型提示能让我们代码更易读。...,但它是编写优秀可读代码必备条件。...写在最后 掌握类型提示并不困难,但它可以提高代码可读性。在编写优秀Python代码时,使用类型提示是至关重要,特别是在开发大型企业应用程序并需要与其他开发人员合作时。

14110
  • 正则提取字符串中数字_正则表达式忽略空格python

    文章目录 python从字符串中提取数字 使用正则表达式,用法如下: 解题思路: 代码如下: 匹配指定字符串开头数字 匹配包含指定字符串开头数字 匹配时间,17:35:24...匹配时间,20181011 15:28:39 python从字符串中提取数字 使用正则表达式,用法如下: ## 总结 ## ^ 匹配字符串开始。...你可以利用 re.search 函数返回对象 groups() 函数获取它值。...## 正则表达式中点号通常意味着 “匹配任意单字符” 解题思路: 既然是提取数字,那么数字形式一般是:整数,小数,整数加小数; 所以一般是形如:----.-----; 根据上述正则表达式含义,可写出如下表达式...本站仅提供信息存储空间服务,拥有所有权,承担相关法律责任。如发现本站有涉嫌侵权/违法违规内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

    3.2K20

    维吉尼亚密码及程序实现

    凯撒加密 在密码学中,恺撒密码是一种最简单且最广为人知加密技术。它是一种替换加密技术,明文中所有字母都在字母表上向后(或向前)按照一个固定数目进行偏移后被替换成密文。...例,当偏移量是3时候,所有的字母A将被替换成D,B变成E,以此类推。这个加密方法是以恺撒名字命名,当年恺撒曾用此方法与其将军们进行联系。恺撒密码通常被作为其他更复杂加密方法中一个步骤。...恺撒密码还在现代ROT13系统中被应用。但是和所有的利用字母表进行替换加密技术一样,凯撒密码密度是很低,只需简单地统计字频就可以破译。...维吉尼亚密码 在单一恺撒密码基础上,法国外交家布莱斯·德·维吉尼亚(Blaise de Vigenère)发明了一种方法来对同一条信息中不同字母用不同密码进行加密。...维吉尼亚密码引入了“密钥”概念,即根据密钥来决定用哪一行密表来进行替换,以此来对抗字频统计。

    1.9K100

    维吉尼亚密码原理详解及算法实现

    【维吉尼亚密码编写】 1....(或者采用维吉尼亚密码编写,输入明文长度是任意) 明文:量子通信保密技术诞生和快速发展主要取决于以下两个因素: a、经典保密通信面临着三个难以彻底解决关键问题,即密钥协商、身份识别和窃听检测,这些问题有效解决需要新技术...在Vigenere密码中,用户钥是一个有限序列,我们可以通过周期性(周期为d)将k扩展为无限序列,其中Ki=K(i mod d),从而得到工作钥。...如果用Φ和θ分别表示密文和明文字母,则Vigenere密码变换公式为:Φ≡(θ+ki)(mod n)该密码体制有一个参数n。 ​...= 3); return 0; } Test sample: 由Vigenere密码基本原理可知,它未能完成中文密码编写,因此我们采用将明文翻译为英语,再对其进行加密,样例中取密钥为sduqingdao

    88810

    山东大学密码学引论复习重点总结与期末试题

    考察重要知识点包括 香农定理 完美加密(完美加密定义与证明) 一次一密 对称加密与非对称加密基本思想 哈希函数基本知识 Vigenere 加密 Elgamal实现过程 序列化与反序列化 试题回顾...1)使用Vigenere 算法(字节版本)对以下十六进制字符串表示字节数组进行加密,将加密结果以十六进制字符串表示: 明文:DEADBEEF 密钥:A1B2C3D4 四、问答题(25分) 1)...为何网站存储用户密码时,不能存储密码明文,而是存储密码加盐哈希结果?...(5分) 3)以下是进行ElGamal加密Python 3代码,计算 r t-a"(modp)和t -m·(8*)(modp)。这两行代码存在一个共同问题,写出这个问题以及修改后代码。...(7分) r= alpha**k % p t =m * (beta ** k % p)% p 4)以 Python 3代码形式举出一个反序列化、序列化例子,和一个文字编码、解码例子。

    62111

    多表替换加密

    Playfair Playfair密码依据一个5*5正方形组成密码表来编写密码表里排列有25个字母。如果一种语言字母超过25个,可以去掉使用频率最少一个。...加密步骤 编制密码表 确定一个密钥,将后出现重复字母去掉,按行或列顺序写入5*5密码表中,剩下字母按顺序写入密码表中,例如密钥为LEAFBACK,去重后为LEAFBCK,得到密码表如下: L E...如果成对后有两个相同字母紧挨或最后一个字母是单个,就插入一个字母X(或者Q)。 编写密文 对于每一对字母p1p2: 若p1 p2在同一行,对应密文c1 c2分别是紧靠p1 p2 右端字母。...ADFGX密码表 A D F G X A b t a l p D d h o z k F q f v s n G g j c u x X m r e w y Vigenere 维吉尼亚密码Vigenere...)是使用一系列凯撒密码组成密码字母表加密算法,属于多表密码一种简单形式。

    32120

    X-NUCA2018线上赛 Writeup

    先是尝试了下pintools,不过没跑出来,手动尝试了好久,只推出了前面两个字符,可能是脚本问题。...可以看出题目是将字母首先对应成了数字 而后使用长度分别为m和n密钥keya和keyk对明文p进行了加密 关键点在于使用%m和%n是使密钥循环起来进行加密 这样不由得想起vigenere密码 首先选择一个密钥...随后循环使用密钥对密文进行加密 因此破解原理应该与破解vigenere密码原理类似 这里就可以利用重合指数方法来对这个多表替换密码进行分析与破解 维吉尼亚密码破解及重合指数 这是一种破解vigenere...+p(z)^2=0.0687 为了破解密钥长度l,我们需要使用上述重合指数 我们已经知道,维吉尼亚密码可以被分解为若干组平移密码来破译,而一个明文足够长平移密码重合指数接近0.0687。...经过爆破尝试,这里当l为6整数倍周期,切出来子密文段信息指标都很接近0.065 因此这里推测密钥keya和keyk长度最小公倍数l为6 在求得密钥长度之后,通过穷举密钥字母每一种可能取值(a

    1.1K20

    buuctf_crypto部分wp(6.21更)

    ,其中写了一长串数字,第一个想法就是将每个数字都转换成对应ASCII码,但是写脚本时每行一个数字比较方便,所以我们先将txt中多余内容删去,然后将空格替换为回车,此处就涉及到了如何替换成回车:回车在替换时可用...^p表示 替换后写脚本,将数字转换为对应ASCII码,由于正常转换会出现不可显示字符,而且本题题目的rot,我们尝试rot13 out='' f=open('rot.txt','r') while...& 维吉尼亚密码 下载附件得到hint.txt和一个加密过压缩包,查看hint.txt,是键盘密码一种,由空格分隔每个字符串都包上了键盘一个字母,比如xdfv包上了c,将这留个字母解出来拼在一起得到压缩包密码...flag,不过需要注意是在解密时我们需要将那几个特殊符号{}和_用相同字母替换掉,比如我都用b替换掉 再将得到明文中对应位置换回原来符号即可得到flag flag:flag{what_a_classical_vigenere...} yxx 考点:xor 本题和异性相吸那题差不多,可能题目名字里少了个x(2333 下载附件得到两个txt文件,用010editor打开发现长度相同,直接尝试xor,即可得到flag a = '6C

    37820

    python写一个简单有效登录入口

    1 问题 python是一种简单高效编程语言,来用于解决实际问题,对于一个系统于app来说,登陆系统功能是基础,用python编写一个登录界面。...n并把这一行按空格分成两列,分别赋值为user,passwd两个变量 if username == user: #判断输入用户是否存在 passwd=input ('请输入密码:') if password...print('密码和用户名匹配,尝试超过三次,用户被锁定') lock_file.write('%s \n'%username) lock_file.close() user_pass.close(...) exit() elif match==True: print('登录成功') break else: print('无效选项,程序已退出') 3 结语 针对用python编写登录系统问题,运用判断语句与列表成功完成...,以后对与app与小程序编写实现了第一步。

    13310

    CTF入门学习笔记——Crypto密码(古典密码

    凯撒密码 凯撒密码算是古典密码里面非常有名密码了,相传凯撒大帝曾经使用使用这种密码与下属沟通,所以命名为凯撒密码。...他核心特点就是有两种不同元素(不一定是.-,还可能是01,AB之类)和间隔(空格或者/),当我们看到上面特征时,就可以考虑摩斯密码了。...摩斯 题目:BUUCTF在线评测 (buuoj.cn) 打开附件得到一串点横,然后有空格隔开,大概率为摩斯密码。....-- — …- 解码结果如下所示: ILOVEYOU ---- 维吉尼亚密码 维吉尼亚密码(又译维热纳尔密码)是使用一系列凯撒密码组成密码字母表加密算法,属于多表密码一种简单形式。...,如果我们知道密钥,也就好解决了,但是目前没有给我们,所以我们采用暴力破解办法(Vigenere Solver | guballa.de),最终能得到结果: flag is afctf{Whooooooo_U_Gotcha

    82820

    关于“Python核心知识点整理大全3

    你在终端会话中向 Python询问这个变量值时,可看到末尾空格(见2)。对变量favorite_language调用方法 rstrip()后(见3),这个多余空格被删除了。...接下来,我们 分别删除末尾(见2)、开头(见3)和两端(见4)空格尝试使用这些剥除函数有助于你 熟悉字符串操作。在实际程序中,这些剥除函数最常用于在存储用户输入前对其进行清理。...看到Python代码 以普通句子颜色显示,或者普通句子以Python代码颜色显示时,就可能意味着文件 中存在引号匹配情况。...有些Python 2 print语句也包含括号,但其行为与Python 3中稍有不同。 简单地说,在Python 2代码中,有些print语句包含括号,有些包含。...Python解释器将忽略第1行,只执行第2行 Hello Python people! 2.5.2 该编写什么样注释 编写注释主要目的是阐述代码要做什么,以及是如何做

    12410

    条件判断

    在生活中,经常会用到条件判断站比如登录网站账号时,系统会判断输入账号密码是否正确,如果正确,就登录成功。...在python中编程时不需要手动按空格或Tab键缩进,输入完【冒号】后按回车键,会自动实现下一行代码缩进。...完全可以用elif做更细致判断: 程序运行时会按照从上到下顺序进行尝试,看满足哪个条件,如果不满足就继续尝试。...直到遇到满足条件,然后执行条件下语句。 elif作用是提供一个不同于if条件条件,可以有多个elif条件同时出现,甚至可以接else语句。...,if语句执行有个特点,它是从上往下判断,如果在某个判断是True,吧该判断对应语句执行后,就忽略掉剩下elif和else,所以,请测试并解释为什么下面的程序打印是teenager: age =

    2K20

    利用帕斯卡三角和谢尔宾斯基三角加密算法

    频率分析虽然有可能破译出密文,但是要经过25×25=625钟字母组合而不是25钟可能出现文本[15]Vigenere加密是一种多字符替换加密算法。...Vigenere加密使用是26×26Vigenere字母表[15]栅栏加密技术是将明文按照对角线序列书写并将行序列组合成密文加密方法。...在栅栏密码中,我们将原文中空格删除并将字母写到Z字形图案中。破解栅栏密码关键就是栅栏数。[15]Hill密码中,利用矩阵乘法知识进行加密。...在[11]中,作者利用从SHA-512和MD5散列函数随机参数派生密钥开发了一种新对称密码系统。...从结果来看,明文中重复字符映射到密文中不同字符。因此,密文不易受密码分析和字母频率攻击 五、总结 本文中,我们开发了一种使用帕斯卡和谢尔宾斯基三角形原理加解密文本信息密码系统。

    1.1K10

    Python 密码破解指南:0~4

    第三章:字符串和编写程序 涵盖了编写完整程序,并介绍了本书所有程序中使用字符串数据类型。 第四章:反向密码 解释了如何为你第一个密码编写一个简单程序。...第十五章:破解仿射密码 讲解如何写程序破解仿射密码。 第十六章:编写简单替换密码 涵盖了编写一个简单替换密码加密程序。...但凯撒密码(以及大多数其他密码)并非如此。事实上,双重加密结果和普通加密结果是一样。让我们尝试对消息进行双重加密,看看为什么。...但是一定要确保表达式总是在行首开始,前面没有空格,因为行首空格会改变 Python 解释指令方式。您将在第 45 页块中了解更多关于行首空格信息。...但是在你破解密码之前,你需要学习一些基本编程概念,所以你还需要读几章编程章节。 在本章中,您学习了在交互式 shell 中编写 Python 指令基础。

    42240

    关于“Python核心知识点整理大全8

    Python格式设置指南编写者深知,代码被阅读次数比编写次数多。...对于字处理文档来说,这样做 效果很好,但混合使用制表符和空格会让Python解释器感到迷惑。每款文本编辑器都提供了一种 设置,可将输入制表符转换为指定数量空格。...你在编写代码时应该使用制表符键,但一定要 对编辑器进行设置,使其在文档中插入空格而不是制表符。 在程序中混合使用制表符和空格可能导致极难解决问题。...如果你混合使用了制表符和空 格,可将文件中所有的制表符转换为空格,大多数编辑器都提供了这样功能。 4.6.3 行长 很多Python程序员都建议每行超过80字符。...如果条件测试值为True, Python就执行紧跟在if语句后面的代码;如果为False,Python忽略这些代码。 5.2.1 检查是否相等 大多数条件测试都将一个变量的当前值同特定值进行比较。

    10810
    领券