Skip to content

老司机新豪车

这几天闲着无聊又写了个新东西~

简介:

超级简单,但是也超级牛逼,给老司机们的一种新开车方式。

被一种超级厉害的编程语言WhiteSpace启发,这种语言只识别空格,Tab和换行符,这里的WhiteSpace,是指的一种加密方式,只会识别空格和Tab。

这种车比某些摩尔斯电码车要好,因为它加密出来的东西全是一堆空白人类无法用肉眼直接识别出来,但是前者不行。

这货不仅能加密一条单独的信息,同时也能直接加密一整个文件。但是注意加密出来的玩意会比原来的文件大小大,所以就试着加密一些文本文件和种子文件,一整部影片就别这么做了……

用法:

python whitespace.py -e|-d (-i input -o output)
-h, –help:查看帮助
-e, –encrypt:运行加密模式
-d, –decrypt:运行解密模式
-a, –advanced:使用 + 作为分隔符来避免某些软件的二逼转义
-i, –input=:读入一个文件而不是从键盘输入
-o, –output=:输出为一个文件而不是打印到屏幕

注意运行解密模式的时候,所有除空格和Tab之外的字符都会被忽略,但是至少包含一个空格或者Tab否则程序会丢出个异常。

原理:

就像我之前说的那样,非常简单,我们都知道电脑里的东西是由二进制码0/1构成,所以一个空格代表一个0,一个Tab代表一个1。

这就是啦~

实例:

以下的所有内容均需通过查看HTML源代码的方式进行拷贝。

下面的就是一条被加密过的Hello, World! :
                                                                                  
屏幕快照 2016-01-15 下午11.06.48
山口山,棒!

同样,这玩意支持Unicode编码,例如你好 :
                                 
屏幕快照 2016-01-15 下午11.07.10
大多数软件会把连续的空格转义了,所以我们可以使用-a模式加入+为分隔符:
+ + + ++ ++++ +++ + ++ + + ++ +++ +++ + + ++ ++++ +++ + ++ + + ++ +++ +++
屏幕快照 2016-01-16 下午10.18.53
看起来更有迷惑性了呢!

但是,使用文件总是百利而无一害的:)

待做:

  • 插入一些随机的词语或一整篇文章,使加密完的东西更要有迷惑性。
  • 试图加入密码解密模式

许可:

啥?许可?什么时候有那玩意了?想干啥就干啥吧。


下面是源码:

# Author: SuperFashi
import binascii
import getopt
import sys
import os

Formore = 0

def writeFile(message, path):
    file = open(path, 'w')
    file.write(message)
    file.close()

def readFile(path):
    file = open(path).read()
    return file

def readWS(white):
    ret = ''
    for char in white:
        if char == ' ':
            ret += '0'
        elif char == '  ':
            ret += '1'
    return ret

def writeWS(bin):
    ret = ''
    for char in bin:
        if char == '0':
            ret += ' '
        elif char == '1':
            ret += '    '
        if Formore:
            ret += '+'
    return ret

def toBin(text):
    bits = bin(int(binascii.hexlify(text), 16))[2:]
    return bits.zfill(8 * ((len(bits) + 7) // 8))

def toStr(bin):
    hex_string = '%x' % int(bin, 2)
    n = len(hex_string)
    return binascii.unhexlify(hex_string.zfill(n + (n & 1))).decode('utf-8')

def usage():
    # print('Watch the code yourself please!')
    print('Usage:')
    print('python whitespace.py -e|-d (-i input -o output)')
    print('-h, --help: View this manual')
    print('-e, --encrypt: Run encrypt mode')
    print('-d, --decrypt: Run decrypt mode')
    print('-a, --advanced: use \'+\' as a spliter in order to prevent some idiot escape methods')
    print('-i, --input=: Read a file instead of typing it')
    print('-o, --output=: Write to a file instead of printing it')
    print('')
    print('Notice that when you running decrypt mode, everything besides spaces and tabs will be ignored, but at least contain one space or tab or the program will throw an error.')
    exit()

if __name__ == '__main__':
    encrypt = 0
    decrypt = 0
    inputPath = 0
    outputPath = 0
    try:
        opts, args = getopt.getopt(sys.argv[1:], 'haedi:o:', ['help', 'advanced', 'encrypt', 'decrypt', 'input=', 'output='])
    except:
        usage()
    for opt, arg in opts:
        if opt in ('-h', '--help'):
            usage()
        elif opt in ('-e', '--encrypt'):
            encrypt = True
        elif opt in ('-d', '--decrypt'):
            decrypt = True
        elif opt in ('-i', '--input'):
            if os.path.exists(arg):
                inputPath = arg
            else:
                print('You have entered a wrong input path!')
                usage()
        elif opt in ('-o', '--output'):
            outputPath = arg
        elif opt in ('-a', '--advanced'):
            Formore = True
    if encrypt and decrypt:
        usage()
    if encrypt:
        if not inputPath:
            print('Please enter some secret code:')
            text = raw_input()
        else:
            text = readFile(inputPath)
        try:
            encryptedText = writeWS(toBin(text))
        except Exception, e:
            print(e)
            print('Encrypt success...fully failed due to some reasons.')
            print('Try to check your input!')
            usage()
        print('Encrypt finished!')
        if not outputPath:
            print('Please completely copy all the *invisible* things down below:')
            print(encryptedText)
        else:
            writeFile(encryptedText, outputPath)
            print('Please check your file to get some *invisible* things')
    elif decrypt:
        if not inputPath:
            print('Please enter some *blanks* here:')
            white = raw_input()
        else:
            white = readFile(inputPath)
        try:
            text = toStr(readWS(white))
        except Exception, e:
            print(e)
            print('Decrypt success...fully failed due to some reasons.')
            print('Try to check your input!')
            usage()
        if not outputPath:
            print('Here\'re some messages:')
            print(text)
        else:
            writeFile(text, outputPath)
            print('You can now see the original texts.')
    else:
        usage()

 

Published in我的程序

One Comment

  1. zqh9843 zqh9843

    这玩意挺有意思的。不过说实话,开车用图种就行。。。如果某些人蓄意举报或者过河拆桥的话,那真是防不胜防。

发表评论

邮箱地址不会被公开。 必填项已用*标注