【问题标题】:Simple Python code to scramble descramble file contents用于打乱解扰文件内容的简单 Python 代码
【发布时间】:2012-09-19 11:47:13
【问题描述】:

我正在寻找一个简单的小程序来加扰和解扰文件的内容。该文件是一个 zip 文件,因此它可能包含任何字符。正在考虑类似二进制补码之类的东西,但不知道如何在 Python 中实现。

原因是我现在的雇主有严格的互联网和文件安装法,我想邮寄自己的文件,而不让邮寄者将附件检测为 zip 文件(即使您将其重命名为 .jpg,它也会这样做) .

我已经在我的工作机器上安装了 Python。

【问题讨论】:

    标签: python file scramble


    【解决方案1】:

    您可以尝试xor'ing 具有特定值的文件内容,创建一个XOR-cipher,但请确保以二进制模式读取/写入文件。您必须对此进行测试,看看它是否适合您的目的(它适用于文本文件,我不明白为什么它不适用于二进制文件。)

    当然,您必须使用相同的(键)值(例如字符)进行编码和解码 - 尽管您可以对这两个操作使用相同的代码。

    这是我最近整理的一些代码:

    import sys
    
    def processData(filename, key):
        with open(filename, 'rb') as inf, open(filename+'.xor', 'wb') as outf:
            for line in inf:
                line = ''.join([chr(ord(c)^ord(key)) for c in line])
                outf.write(line)
    
    if __name__ == '__main__':
        if len(sys.argv) != 3:
            print 'Usage: xor_it filename key'
            print '       key = a single character'
        else:
            processData(sys.argv[1], sys.argv[2])
    

    【讨论】:

      【解决方案2】:

      stealthZip 成功通过电子邮件和代理限制!

      但是,如果您确实想在 python 中执行此操作,您可以尝试使用pickle。以二进制模式加载文件,腌制,发送,并在接收端取消腌制。不过,我不知道 pickle 对二进制文件的作用如何。

      【讨论】:

        【解决方案3】:

        您也可以简单地对文件进行 base64 编码。这将使您的文件更大,但具有全是 ascii 文本的好处(然后您可以将其粘贴到电子邮件中。)

        请注意,这将覆盖当前文件。将其更改为输出到另一个文件并不难。

        #b64.py
        import base64
        import sys
        
        def help():
            print """Usage: python b64.py -[de] file
            -d\tdecode
            -e\tencode"""
            sys.exit(0)
        
        def decode(filename):
            with open(filename) as f:
                bin = base64.b64decode(f.read())
            with open(filename,'wb') as f:
                f.write(bin)
        
        def encode(filename):
            with open(filename,'rb') as f:
                text = base64.b64encode(f.read())
            with open(filename,'w') as f:
                f.write(text)
        
        if len(sys.argv) != 3:
            help()
        
        if sys.argv[1] == "-d":
            decode(sys.argv[2])
        elif sys.argv[1] == "-e":
            encode(sys.argv[2])
        else:
            help()
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-06-18
          • 2018-10-09
          • 1970-01-01
          • 2015-06-08
          • 2017-04-18
          相关资源
          最近更新 更多