鱼C论坛

 找回密码
 立即注册
查看: 3635|回复: 0

[萌新报道] 简单字符串加密解密

[复制链接]
发表于 2018-4-8 02:08:22 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
简单的英文字符串加密解密(基础篇)

我们知道电脑上的每个字符都有一个唯一编码,通用的标准是 ASCII (American Standard Code for Information Interchange 美国信息交换标准编码)。例如大写A = 65, 星号(*) = 42,小写k = 107。

一种现代加密方法是用一个密钥中的给定值,与一个文本文件中字符的 ASCII 值进行异或。使用异或方法的好处是对密文使用同样的加密密钥可以得到加密前的内容。例如,65 XOR 42 = 107, 然后 107 XOR 42 = 65。

对于不可攻破的加密,密钥的长度与明文信息的长度是一样的,而且密钥是由随机的字节组成的。用户将加密信息和加密密钥保存在不同地方,只有在两部分都得到的情况下,信息才能被解密。

不幸的是,这种方法对于大部分用户来说是不实用的。所以一种修改后的方案是使用一个密码作为密钥。如果密码比信息短,那么就将其不断循环直到明文的长度。平衡点在于密码要足够长来保证安全性,但是又要足够短使用户能够记得。

我们的任务很简单:设计一个转换程序,可以把一个字符串(可以仅限于AscII码范围内,不考虑中文字符,或其他非utf-8编码)和任意密钥进行加密和解密操作。

例如:         输入明文:Father,密钥:god, 输出密文:33,14,16,15,10,22
                输入密文:33,14,16,15,10,22, 密钥:god, 输出明文:Father
代码:
# _*_ coding: utf-8 _*_
import sys

reload(sys)
sys.setdefaultencoding('gbk')


def encodes(string, key):
    keys = key * (len(string) // len(key)) + key[:len(string) % len(key)]
    output = []
    for i, s in enumerate(string):
        output.append(str(ord(s) ^ ord(key[i])))
    return ','.join(output)


def decodes(string, key):
    string = string.split(',')
    keys = key * (len(string) // len(key)) + key[:len(string) % len(key)]
    output = []
    for i, s in enumerate(string):
        output.append(chr(int(s) ^ ord(key[i])))
    return ''.join(output)


en_string = raw_input(u'请输入要加密的文字:')
en_key = raw_input(u'请输入要加密的密钥:')
output = encodes(en_string,en_key)
print( u"密文为:"+output)
raw_input()
de_string = raw_input(u'请输入要解密的文字(以",")分割:')
de_key = raw_input(u'请输入要解密的密钥:')
output = decodes(de_string,de_key)
print(u"明文为: "+output)


来自:jerryxjr1220
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-5-14 16:18

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表