异或转密练习

异或转密练习

异或介绍

在二进制中,1与0异或的结果为1,即 1^0=1
又如:1010=00,1001=11,101^110=011
很简单,每个对应位的数相同结果就为0,不同则为1

基本思路

1、通过明文字符与密钥字符一一异或,当然,异或是取得该字符对应的ASCII码,
2、将该字符对应的ASCII码转换成二进制数,最后两个二进制数进行异或运算,得到一个新
的二进制数,
3、再将该二进制数转换成ASCII码(就是把二进制数转换成十进制数),最终获
得该ASCII码对应的字符,获得一个密文字符。
原文链接:https://blog.csdn.net/qq_41699991/article/details/83217028

题目

题目描述
对称加密是采用同一个密码进行加密和解密的方法,也称为单密钥加密。输入为一行数据,加密后的文本和密钥字符串,中间由空格分开。文本和密钥长度均小于50个字符。输出为解密后的文本。加密和解密是相同的操作:文本与密钥相同位置的字符进行异或操作,产生结果为加密或解密后的字符。如果文本比密钥长,则超出部分从密钥第一个字符再次进行异或操作,直到文本结束。例如:原文本为“ABCDE”,密钥为“#5”,则加密文本为“ABCDE”与“#5*#”的异或,结果为“kavnf”。如果对“kavnf”再次使用相同的密钥“*#5”进行解密,则得到原文本“ABCDE”。
样例输入
{P\DSKWFQXXWJ@^[K 28346
样例输出
Ihopeyouenjoythis

题解

message,key = input().split()
def passwords(message,key):
    len1 = len(message)
    len2 = len(key)
    key = key*(len1//len2)+key[:len1%len2]
    password = []
    for i in range(len1):
        password.append(chr(ord(message[i])^ord(key[i])))
    print(''.join(password))
passwords(message,key)

补充函数(简易)

chr():将ASCII码值转化为字符串
ord():将字符串转化为ASCII值

异或

异或符:^
举个例子:
10101^11100=01001
结果是01001
01001^10101=11100
01001^11100=01001
异或的结果再与原来的其中一个数异或运算就得到另外一个原来的数

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值