如何在Python中将UTF-8加密成A-Z以外的形式?

许多年前,我在Windows上用C#编写了一个程序,该程序使用caeser chipher(我原本以为是)“加密”文本文件.

那时,我想要的字符不仅是A-Z,0-9,而且使之成为可能,但从未考虑过背后的实际理论.

查看一些文件,并将其与this website进行比较,看来UTF-8正在转移.

我启动了Windows VM(因为现在正在使用Linux)并输入了以下内容:abcdefghijklmnopqrstuvwxyz

它生成了一个类似于十六进制的文本(移位了15次):

70 71 72 73 74 75 76 77 78 79 7a 7b 7c 7d 7e 7f c280 c281 c282 c283 c284 c285 c286 c287 c288 c289

我怎样才能使十六进制看起来像这样?

61 62 63 64 65 66 67 68 69 6a 6b 6c 6d 6e 6f 70 71 72 73 74 75 76 77 78 79 7a

还是有任何更容易/更好的方法来做到这一点?

更新

我正在使用Python 3.5.3,这是到目前为止的代码:

import sys

arguments = sys.argv[1:]
file = ""

for arg in arguments:
    if arg[0] != "-":
        file = arg

lines = []
with open(file) as f:
    lines = f.readlines()

for line in lines:
    result = 0
    for value in list(line):
        #value = "0x"+value
        temp=value.encode('utf-8').hex()
        temp+=15
        if(temp>0x7a):
            temp-=0x7a
        elif(temp<=0):
            temp+=0x7a
        #result = result + temp
    print (result)

不幸的是,我暂时没有C#源代码.我可以尝试找到它

解决方法:

假设您输入的是ASCII文本,最简单的解决方案是将ASCII编码/解码并使用内置方法ord()和chr()从字符转换为字节值,反之亦然.

请注意,temp值不能小于0,因此可以删除第二个if语句.

注意:这超出了问题的范围,但是我也注意到您正在进行参数解析.我强烈建议您改用argparse,因为它非常容易,并且为您免费提供了很多额外的功能(即,如果您使用’–help’选项启动应用程序,它将执行错误检查并打印出很好的帮助消息).请参见下面的示例代码:

import argparse

parser = argparse.ArgumentParser()
parser.add_argument(dest='filenames', metavar='FILE', type=str, nargs='+',
                    help='file(s) to encrypt')
args = parser.parse_args()

for filename in args.filenames:
    with open(filename, 'rt', encoding='ascii') as file:
        lines = file.readlines()
    for line in lines:
        result = ""
        for value in line:
            temp = ord(value)  # character to int value
            temp += 15
            if temp > 0x7a:
                temp -= 0x7a
            result += chr(temp)  # int value to character
        print(result)
上一篇:c#-AES填充并将密文写入磁盘文件


下一篇:在Android应用程序中存储凭据