|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 戴宇轩 于 2014-11-18 18:45 编辑
本帖子是上一个帖子的延续, URL是:http://bbs.fishc.com/forum.php?mod=viewthread&tid=55615&page=1#pid2171770相比上一个程序, 最大的升级是改变原来只能加密9个字符的限制, 其次, 它现在可以加密中文和Emoji表情,(本脚本应该不会再次更新了)- #加密(大部分注释都和原来是一样的, 还简化了一下)
- from random import *
- flag = list()
- string = list(input())
- string2 = ''
- flag.append(len(str(len(str(len(string)))))) #将字符数的长度的长度(对, 就是长度的长度)放入列表flag
- #如果不加上一行, 程序只能对999999999个字符进行操作, 因为控制字符串长度的变量是1位数, 所以是9个9
- #一旦加上了, 控制字符串长度的变量就最多是9位数, 所以九九八十一, 程序最多就能对由81个9组成的整数个字符进行操作了, 不要小看它, 把它最多能控制的字符数换算成存储容量单位, 任何一台计算机的硬盘都承受不起
- flag.append(len(str(len(string))))
- flag.append(len(string))
- flag.extend([len(str(ord(i))) for i in string] + [ord(i) for i in string]) #这里把原来的两行合并为一行
- for i in flag:
- string2 += str(i)
- string = list(string2)
- x = range(10)
- for repeat in range(3): #如果加密结果太长, 可以把括号里的数字改成小一些的整数, 但是下一个脚本的第3行的括号里的数字要改成本行你设定的数字减1
- for i in range(0, len(string) * 2 - 1, 2):
- string.insert(i, x[randint(0, 9)])
- string.reverse()
- for i in string:
- print(i, end = '')
复制代码- #解密
- string = list(input()[::-1]) #与加密脚本的加密过程相对应的解密过程(参考上一个帖子)
- for repeat in range(2): #我是第三行
- string = string[1::2]
- string.reverse()
- temp = string[1::2]
- string = list()
- string.extend([int(i) for i in temp]) #将列表里的内容(字符)转化为数字
- length = 0
- bit = 0
- l = string.pop(0) #将加密前字符串位数的位数取出, 放在l里
- for i in range(l):
- length += string.pop(0) * 10 ** (l - i - 1) #将列表的前l位取出并转为整数放在length中
- for i in range(length):
- bit += string.pop(0) * 10 ** (length - i - 1) #将列表的前length位取出并转为整数放在bit中
- temp = list()
- flag = string[:bit] #将加密前各个字符的ASCII码的位数(列表)从string取出并放入flag中
- string = string[bit:] #将string中的flag部分截掉, 保留加密前各个字符的ASCII码
- for i in flag:
- if i == 3: #如果当前字符(flag中的元素, 也是加密前字符串的对应字符的ASCII码的长度)为3
- temp.append(string.pop(0) * 100 + string.pop(0) * 10 + string.pop(0)) #将string的前三位转为一个三位数, 放入列表temp
- elif i == 2:
- temp.append(string.pop(0) * 10 + string.pop(0)) #如果是2, 取string的前两位转化成一个二位数, 放入列表temp
- else:
- temp.append(string.pop(0)) #否则(如果是1), 取string的第一位, 放入列表temp(因为从第8行开始, string里的元素都是一位数整数)
- for i in temp:
- print('%c' % i, end = '') #将temp里的ASCII码转化为字符, 打印出来
复制代码 |
|