Python:将加密数据写入文件

时间:2014-11-28 20:37:41

标签: python file encryption encode

我为学校制作了一个聊天应用,有些人只是写进了数据库。所以我的新项目是加密资源。所以我做了一个加密功能。

它工作正常,但是当我尝试在文件中写入加密数据时,我收到错误消息:

File "C:\Python34\lib\encodings\cp1252.py", line 19, in encode
    return codecs.charmap_encode(input,self.errors,encoding_table)[0]
UnicodeEncodeError: 'charmap' codec can't encode character '\x94' in position 0:         
character maps to <undefined>

如何解决这个问题?

完整代码:

def encrypts(data, step):
    newdata = ""
    i = 0
    while (len(data) > len(step)):
        step += step[i]
        i += 1
    if (len(data) < len(step)):
        step = step[:len(data)]
    for i in range(len(data)):
        a = ord(data[i])
        b = ord(step[i])
        newdata += chr(a+b)
    return newdata

file = open("C:/Users/David/Desktop/file.msg","wb")
file.write(encrypts("12345","code"))

现在,我终于解决了我的问题。创建的ASCII字符不存在。所以我改变了我的职能:

def encrypts(data, step):
    newdata = ""
    i = 0
    while (len(data) > len(step)):
        step += step[i]
        i += 1
    if (len(data) < len(step)):
        step = step[:len(data)]
    for i in range(len(data)):
        a = ord(data[i])
        b = ord(step[i])
        newdata += chr(a+b-100)     #The "-100" fixed the problem.
    return newdata

2 个答案:

答案 0 :(得分:0)

您在编码文件时遇到的问题。

试一试:

  

inputFile = codecs.open('input.txt', 'rb', 'cp1251') outFile = codecs.open('output.txt', 'wb', 'cp1251')

答案 1 :(得分:0)

打开文件进行写入或保存时,请尝试将“b”字符添加到打开模式。所以而不是:

open("encryptedFile.txt", 'w')

使用

open("encryptedFile.txt", 'wb')

这会将文件打开为二进制文件,当您按照自己的方式修改字符时这是必要的,因为您有时会将这些字符设置为ASCII范围之外的值。