首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在这个Python加密脚本中到底发生了什么?

在这个Python加密脚本中到底发生了什么?
EN

Stack Overflow用户
提问于 2018-07-19 06:14:15
回答 1查看 64关注 0票数 1

我目前正在学习如何使用Python处理二进制文件。我在我正在读的书中偶然发现了这段代码:

代码语言:javascript
复制
FILENAME = 'pc_rose_copy.txt'

def display_contents(filename):
    fp = open(filename, 'rb')
    print(fp.read())
    fp.close()

def encrypt(filename):
    fp = open(filename, 'r+b')
    text = fp.read()
    fp.seek(0)
    for c in text:
        if c <= 128:
            fp.write(bytes([c+128]))
        else:
            fp.write(bytes([c-128]))
    fp.close()

display_contents(FILENAME)
encrypt(FILENAME)
display_contents(FILENAME)

我对这段代码有几个疑问,我在书中找不到答案:

1)在第13行("if c ord 128"),由于文件是以二进制模式打开的,因此每个字符都作为其在ASCII表中的索引被读取(即,如果文件没有处于二进制模式,则等同于'if <= (C) <= 128‘)?

2)如果是,那么检查是否有任何角色的索引高于128有什么意义,因为这是一段来自罗密欧与朱丽叶的.txt?

3)这一点更多的是出于好奇,所以请原谅我的天真。我知道这在这种情况下不适用,但是假设脚本遇到一个字节值为128的'c‘,因此将128加到它上面。256字节会是什么样子的--是11111111 00000001吗?

EN

回答 1

Stack Overflow用户

发布于 2018-07-19 06:41:36

我认为加密函数也应该是一个解密函数。加密从文本文件转换为只有高字节的二进制文件。但是else子句用于从高字节返回到文本。我认为如果你添加一个额外的encrypt(FILENAME),你会得到原来的文件。

在文本文件中,“c”不能真正是128。最大值为126 (~),127是del“字符”。但是当我们以256为模工作时,c=128和添加128作为字节将是0(绕回)。在C中,情况就是这样(对于无符号字符)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51411727

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档