0

1 バイト キーと XOR 暗号化を使用して、以下のコードで暗号化されたファイルがあります。

blocksize=256

while (args.secretkey.tell() < blocksize):
generates once?
    sys.stdout.write('.')
    args.secretkey.write(os.urandom(1))

counter=0
args.secretkey.seek(0)
keydata = args.secretkey.read(blocksize)

while 1:
    byte = args.infile.read(1)
    if not byte:
        break
    args.outfile.write(chr(ord(keydata[counter % len(keydata)]) ^ ord(byte)))
    counter+=1

ファイルを復号化するための正しいキーを見つけるにはどうすればよいですか? 正しいキーを取得するには、256 通りの組み合わせを行う必要がありますか?

4

2 に答える 2

1

ここにデコードプログラムがあります(エンコードはランダムに生成されたデータに対するxorであるため、デコードは同じxorを実行することです):

#!/usr/bin/python
import os
import sys
import argparse

blocksize=256

parser = argparse.ArgumentParser(description="Custom encryption algorithm because a friend said that's the way to do it. Anyway, it's called 'Only This Program' since I'm pretty sure that only this program can securely decrypt the files as long as you don't give out your secret.dat file created when you encrypt something.")
parser.add_argument('--infile', metavar='i', nargs='?', type=argparse.FileType('r'), help='input file, defaults to standard in', default=sys.stdin)
parser.add_argument('--outfile', metavar='o', nargs='?', type=argparse.FileType('wb'), help='output file, defaults to standard out', default=sys.stdout)
parser.add_argument('--secretkey', metavar='s', nargs='?', type=argparse.FileType('r'), help='input file, defaults to secretkey.dat', default='secretkey.dat')

args = parser.parse_args()

counter=0
args.secretkey.seek(0)
keydata = args.secretkey.read(blocksize)

while 1:
    byte = args.infile.read(1)
    if not byte:
        break
    args.outfile.write(chr(ord(keydata[counter % len(keydata)]) ^ ord(byte)))
    counter+=1

sys.stderr.write('\nSecret keyfile: %s\nInput file: %s\nOutput file: %s\nTotal bytes: %d \n' % (args.secretkey.name, args.infile.name, args.outfile.name, counter))
于 2013-09-20T07:18:57.700 に答える