首页
学习
活动
专区
工具
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代码时,使用类型提示是至关重要的,特别是在开发大型企业应用程序并需要与其他开发人员合作时。

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

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

    3.3K20

    维吉尼亚密码及程序实现

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

    2K100

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

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

    97610

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

    考察的重要知识点包括 香农定理 完美加密(完美加密的定义与证明) 一次一密 对称加密与非对称加密的基本思想 哈希函数的基本知识 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代码的形式举出一个反序列化、序列化的例子,和一个文字编码、解码的例子。

    66011

    多表替换加密

    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...)是使用一系列凯撒密码组成密码字母表的加密算法,属于多表密码的一种简单形式。

    36120

    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

    42820

    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

    用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与小程序的编写实现了第一步。

    16410

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

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

    1.2K20

    关于“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 该编写什么样的注释 编写注释的主要目的是阐述代码要做什么,以及是如何做的。

    13310

    条件判断

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

    2K20

    Python 密码破解指南:0~4

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

    49240

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

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

    1.1K10
    领券