【问题标题】:Python: Write encrypted data to filePython:将加密数据写入文件
【发布时间】:2015-01-27 12:32:02
【问题描述】:

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

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

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

【问题讨论】:

  • 您应该将您的答案作为单独的答案发布,并且不要包含在您的问题中。您也可以在接受时将您的问题标记为已解决。
  • 我相信如果用户输入某些字符,解决方案仍然会崩溃,不是吗?实际上,我过去在创建完全相同的软件时也遇到过同样的问题,这很有趣。我用base64编码修复了它。我还支持密钥,这样如果两个人使用相同的密码,即使你运行服务器也无法解密!您可以运行 IMGUI.py 并通过在底部灰色框中键入 /connect 连接到聊天室,我的源代码在这里(如果您也想查看服务器端部分,请告诉我):digitaldiscrepancy.com/IMSafe.zip

标签: python file encryption encode


【解决方案1】:

您在文件编码方面的问题。

试试看:

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

【讨论】:

    【解决方案2】:

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

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

    使用

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

    这将以二进制形式打开文件,当您按原样修改字符时这是必需的,因为您有时会将这些字符设置为 ASCII 范围之外的值。

    【讨论】:

    • 谢谢你猜这是个好主意。如何将str转换为二进制?
    • 您不必做任何特别的事情。只需像往常一样编写字符串,其余的由 python 完成。
    • Um No... : "TypeError: 'str' 不支持缓冲区接口"
    • 如果我没记错的话 Python 在 v3 中需要 explicit encoding
    猜你喜欢
    • 1970-01-01
    • 2014-06-02
    • 2016-09-23
    • 2016-04-16
    • 2015-01-21
    • 1970-01-01
    • 1970-01-01
    • 2017-03-29
    • 1970-01-01
    相关资源
    最近更新 更多