鱼C论坛

 找回密码
 立即注册
12
返回列表 发新帖
楼主: jerryxjr1220

[技术交流] python小练习(003):简单字符串加密解密(提高篇)

[复制链接]
发表于 2016-12-5 09:31:55 | 显示全部楼层

明白了,谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-2-9 13:54:27 | 显示全部楼层
首先得想到空格的作用,要不就惨了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-2-17 14:32:57 | 显示全部楼层
jerryxjr1220 发表于 2016-11-15 12:52
我的解答:利用英语文章中空格最多的特点,先用空格异或密文,然后统计转换后的字母哪个出现次数最多就是密 ...

这下看懂了,分成三个表分别异或空格,每个里面最大的链接起来就是密钥,这样就不用再去判断密码了,明白了明白了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-2-17 15:04:21 | 显示全部楼层
余欲渔 发表于 2017-2-17 14:32
这下看懂了,分成三个表分别异或空格,每个里面最大的链接起来就是密钥,这样就不用再去判断密码了,明白 ...

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-2-17 17:33:45 | 显示全部楼层
学习
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-3-31 20:24:31 | 显示全部楼层
本帖最后由 elbert 于 2017-3-31 20:26 编辑
  1. l = [91,33,6,22,85,41,28,6,30,22,25,78,28,19,78,57,26,6,29,89,78,16,29,15,3,1,11,1,85,95,90,85,95,83,60,0,83,1,6,22,85,12,22,18,7,29,27,7,29,18,78,7,29,11,83,34,1,1,17,78,18,25,28,22,20,10,10,85,11,11,28,29,7,16,10,93,85,38,22,85,25,18,6,78,4,28,26,27,85,41,28,17,66,83,20,0,23,85,6,22,85,25,18,6,78,52,26,10,93,85,92,83,61,11,83,2,15,0,85,7,29,85,26,27,16,78,17,16,9,26,27,0,26,27,9,83,2,7,7,29,78,52,26,10,93,85,93,83,61,11,83,22,28,22,20,26,22,17,78,22,3,11,1,12,26,27,28,0,20,85,26,27,16,28,22,85,7,0,91,78,61,26,26,27,28,0,20,85,11,11,28,29,7,6,78,7,29,15,7,85,6,22,85,10,26,17,0,84,1,78,30,20,5,22,91,78,71,85,34,26,19,11,83,28,26,0,16,2,21,85,25,18,6,78,26,27,78,27,28,3,95,85,15,29,17,78,7,29,7,0,85,2,26,19,11,83,18,7,5,16,29,83,25,7,20,29,26,83,1,1,83,16,24,22,7,23,28,27,11,93,85,91,83,33,6,22,85,2,26,18,6,7,85,29,27,28,0,22,6,78,7,29,28,28,0,9,27,85,26,27,16,78,23,20,28,24,27,11,0,6,66,83,20,0,23,85,26,27,16,78,23,20,28,24,27,11,0,6,78,16,20,0,83,27,11,5,16,28,83,16,22,7,28,0,20,0,7,0,29,78,26,1,64,83,67,78,52,26,10,83,6,11,29,1,78,57,26,6,29,85,26,27,16,78,49,20,30,7,28,29,7,85,89,83,1,1,83,1,11,31,25,78,22,3,11,1,12,1,29,16,78,18,23,1,6,1,78,7,29,11,83,25,7,20,29,26,83,6,1,83,1,6,18,1,78,22,3,11,1,12,1,29,16,78,30,28,9,27,1,78,17,16,2,26,16,24,22,85,12,22,22,15,6,6,11,83,26,8,83,29,7,0,85,26,22,6,26,26,24,1,29,12,64,83,77,78,57,26,6,29,85,6,26,24,29,22,25,8,83,2,15,0,85,0,28,1,78,7,29,11,83,25,7,20,29,26,72,85,6,22,85,25,18,6,78,28,27,2,10,85,15,83,2,7,7,27,11,0,6,78,7,26,78,7,29,11,83,25,7,20,29,26,93,85,87,83,33,6,22,85,1,29,16,78,4,29,1,83,28,29,83,1,6,22,85,26,1,0,11,83,25,7,20,29,26,95,85,25,27,26,78,20,28,24,22,6,78,31,28,9,27,1,78,7,26,78,22,3,11,1,12,1,29,16,66,83,2,15,0,85,9,28,28,0,20,85,26,28,85,13,28,24,11,83,28,0,7,26,78,7,29,11,83,2,1,1,25,10,93,85,95,67,85,44,6,1,78,18,25,26,27,26,27,20,29,78,7,29,11,83,2,1,1,25,10,83,2,15,0,85,3,18,17,11,83,1,6,1,26,27,20,29,78,27,28,3,95,85,26,27,16,78,4,26,28,31,17,78,23,28,10,29,82,26,83,7,11,16,26,9,29,28,20,22,85,6,26,24,78,4,29,11,29,85,6,22,85,13,18,24,11,93,85,95,66,85,43,5,16,0,83,28,0,83,29,7,0,85,1,4,27,78,31,20,0,23,85,15,29,17,78,18,24,1,29,18,78,27,28,29,83,26,25,29,85,30,22,26,30,31,16,66,83,29,11,83,2,15,0,85,0,28,1,78,18,22,13,22,5,26,22,17,64,83,68,92,83,55,27,7,85,26,28,85,15,31,25,78,4,29,1,83,23,11,31,28,11,5,16,10,83,29,7,30,85,15,29,17,78,18,22,13,22,5,26,22,17,78,27,28,3,95,85,6,22,85,9,18,3,11,83,1,6,22,85,28,26,18,6,7,85,26,28,85,12,22,22,1,30,16,78,16,29,7,31,17,28,22,27,78,28,19,78,52,26,10,93,85,95,64,85,58,27,16,23,83,20,28,22,85,28,22,23,1,1,27,79,83,33,6,26,6,78,26,6,78,29,26,26,83,20,78,3,29,23,0,28,13,18,25,78,17,28,28,7,29,78,1,16,29,6,25,26,26,27,9,83,19,28,28,24,78,27,0,3,18,27,78,3,20,29,0,28,1,29,85,1,1,85,30,31,20,0,95,85,26,27,28,29,83,7,11,17,28,28,7,29,78,16,26,3,22,6,78,21,7,1,30,85,41,28,17,64,66,65,78,32,26,78,7,29,11,83,34,1,1,17,78,17,16,13,18,24,11,83,29,27,30,20,0,83,20,0,23,85,2,26,3,11,23,85,6,22,7,11,83,26,0,83,16,15,1,1,6,83,20,3,28,27,9,83,0,29,93,85,38,22,85,25,18,6,78,21,0,2,31,85,1,21,85,27,29,19,15,26,25,7,29,18,78,31,26,24,22,85,15,29,17,78,21,20,7,7,29,8,6,25,0,22,6,29,93,85,47,29,17,78,4,16,78,27,20,24,22,85,29,22,16,0,83,29,7,0,85,9,31,26,28,10,89,78,7,29,11,83,18,2,28,7,23,83,26,8,83,1,6,22,85,1,29,25,23,83,38,1,29,85,1,21,85,26,27,16,78,53,20,26,27,16,28]

  2. s1 ,s2 ,s3 = l[::3],l[1::3],l[2::3]
  3. s = [s1,s2,s3]


  4. def counter(s):                   #求出频率最高的频数
  5.        
  6.         alist = []
  7.         for i in range(100):
  8.                 alist.append(0)
  9.                
  10.         for j in s:
  11.                 alist[int(j)]+=1
  12.        
  13.         return (alist)


  14. def f_space(spacount,table):                #求出频率最高的数值
  15.         for j in range(100):
  16.                 if spacount == table[j]:
  17.                         return (j)

  18.                        
  19. def Key(s):                                        #求出key
  20.         key = []
  21.         for list in s:
  22.                 table = counter(list)
  23.                 spacount = (max(table))                             
  24.                 space = f_space(spacount,table)
  25.                 key.append(chr( 32 ^ space ))                             
  26.         return (key)

  27.        
  28. def deco(s1,key):                                #求出key后进行解码
  29.         n1 = len(key)
  30.         m1 = len(s1)
  31.         k1 = m1//n1
  32.         mw1 = []
  33.         for j in range(k1):
  34.                 for i in range(n1):
  35.                         mw1.append(chr(int(s1[i+n1*j]) ^ ord(key[i])))
  36.         print("".join(mw1))

  37.        
  38. keys = Key(s)
  39. print("key:%s" % ''.join(keys))
  40. deco (l,keys)
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-5-29 23:27:24 | 显示全部楼层
  1. from collections import Counter
  2. mima=[91,33,6,22,85,41,28,6,30,22,25,78,28,19,78,57,26,6,29,89,78,16,29,15,3,1,11,1,85,95,90,85,95,83,60,0,83,1,6,22,85,12,22,18,7,29,27,7,29,18,78,7,29,11,83,34,1,1,17,78,18,25,28,22,20,10,10,85,11,11,28,29,7,16,10,93,85,38,22,85,25,18,6,78,4,28,26,27,85,41,28,17,66,83,20,0,23,85,6,22,85,25,18,6,78,52,26,10,93,85,92,83,61,11,83,2,15,0,85,7,29,85,26,27,16,78,17,16,9,26,27,0,26,27,9,83,2,7,7,29,78,52,26,10,93,85,93,83,61,11,83,22,28,22,20,26,22,17,78,22,3,11,1,12,26,27,28,0,20,85,26,27,16,28,22,85,7,0,91,78,61,26,26,27,28,0,20,85,11,11,28,29,7,6,78,7,29,15,7,85,6,22,85,10,26,17,0,84,1,78,30,20,5,22,91,78,71,85,34,26,19,11,83,28,26,0,16,2,21,85,25,18,6,78,26,27,78,27,28,3,95,85,15,29,17,78,7,29,7,0,85,2,26,19,11,83,18,7,5,16,29,83,25,7,20,29,26,83,1,1,83,16,24,22,7,23,28,27,11,93,85,91,83,33,6,22,85,2,26,18,6,7,85,29,27,28,0,22,6,78,7,29,28,28,0,9,27,85,26,27,16,78,23,20,28,24,27,11,0,6,66,83,20,0,23,85,26,27,16,78,23,20,28,24,27,11,0,6,78,16,20,0,83,27,11,5,16,28,83,16,22,7,28,0,20,0,7,0,29,78,26,1,64,83,67,78,52,26,10,83,6,11,29,1,78,57,26,6,29,85,26,27,16,78,49,20,30,7,28,29,7,85,89,83,1,1,83,1,11,31,25,78,22,3,11,1,12,1,29,16,78,18,23,1,6,1,78,7,29,11,83,25,7,20,29,26,83,6,1,83,1,6,18,1,78,22,3,11,1,12,1,29,16,78,30,28,9,27,1,78,17,16,2,26,16,24,22,85,12,22,22,15,6,6,11,83,26,8,83,29,7,0,85,26,22,6,26,26,24,1,29,12,64,83,77,78,57,26,6,29,85,6,26,24,29,22,25,8,83,2,15,0,85,0,28,1,78,7,29,11,83,25,7,20,29,26,72,85,6,22,85,25,18,6,78,28,27,2,10,85,15,83,2,7,7,27,11,0,6,78,7,26,78,7,29,11,83,25,7,20,29,26,93,85,87,83,33,6,22,85,1,29,16,78,4,29,1,83,28,29,83,1,6,22,85,26,1,0,11,83,25,7,20,29,26,95,85,25,27,26,78,20,28,24,22,6,78,31,28,9,27,1,78,7,26,78,22,3,11,1,12,1,29,16,66,83,2,15,0,85,9,28,28,0,20,85,26,28,85,13,28,24,11,83,28,0,7,26,78,7,29,11,83,2,1,1,25,10,93,85,95,67,85,44,6,1,78,18,25,26,27,26,27,20,29,78,7,29,11,83,2,1,1,25,10,83,2,15,0,85,3,18,17,11,83,1,6,1,26,27,20,29,78,27,28,3,95,85,26,27,16,78,4,26,28,31,17,78,23,28,10,29,82,26,83,7,11,16,26,9,29,28,20,22,85,6,26,24,78,4,29,11,29,85,6,22,85,13,18,24,11,93,85,95,66,85,43,5,16,0,83,28,0,83,29,7,0,85,1,4,27,78,31,20,0,23,85,15,29,17,78,18,24,1,29,18,78,27,28,29,83,26,25,29,85,30,22,26,30,31,16,66,83,29,11,83,2,15,0,85,0,28,1,78,18,22,13,22,5,26,22,17,64,83,68,92,83,55,27,7,85,26,28,85,15,31,25,78,4,29,1,83,23,11,31,28,11,5,16,10,83,29,7,30,85,15,29,17,78,18,22,13,22,5,26,22,17,78,27,28,3,95,85,6,22,85,9,18,3,11,83,1,6,22,85,28,26,18,6,7,85,26,28,85,12,22,22,1,30,16,78,16,29,7,31,17,28,22,27,78,28,19,78,52,26,10,93,85,95,64,85,58,27,16,23,83,20,28,22,85,28,22,23,1,1,27,79,83,33,6,26,6,78,26,6,78,29,26,26,83,20,78,3,29,23,0,28,13,18,25,78,17,28,28,7,29,78,1,16,29,6,25,26,26,27,9,83,19,28,28,24,78,27,0,3,18,27,78,3,20,29,0,28,1,29,85,1,1,85,30,31,20,0,95,85,26,27,28,29,83,7,11,17,28,28,7,29,78,16,26,3,22,6,78,21,7,1,30,85,41,28,17,64,66,65,78,32,26,78,7,29,11,83,34,1,1,17,78,17,16,13,18,24,11,83,29,27,30,20,0,83,20,0,23,85,2,26,3,11,23,85,6,22,7,11,83,26,0,83,16,15,1,1,6,83,20,3,28,27,9,83,0,29,93,85,38,22,85,25,18,6,78,21,0,2,31,85,1,21,85,27,29,19,15,26,25,7,29,18,78,31,26,24,22,85,15,29,17,78,21,20,7,7,29,8,6,25,0,22,6,29,93,85,47,29,17,78,4,16,78,27,20,24,22,85,29,22,16,0,83,29,7,0,85,9,31,26,28,10,89,78,7,29,11,83,18,2,28,7,23,83,26,8,83,1,6,22,85,1,29,25,23,83,38,1,29,85,1,21,85,26,27,16,78,53,20,26,27,16,28]
  3. key_m=[[],[],[]]

  4. for i in range(3):
  5.     key_m[i]=mima[i::3]
  6.     s=Counter(key_m[i])
  7.     key_m[i]=sorted(s.items(),key=lambda x:x[1],reverse=True)[0][0]
  8.     key_m[i]=chr(key_m[i]^ord(' '))
  9. key=''.join(key_m)
  10. print("密匙为:",key)

  11. def decode_str(mima,key):
  12.     l_mima=len(mima)
  13.     string=''
  14.     for i in range(l_mima):
  15.         string=string+chr(ord(key[i%3])^mima[i])
  16.     print("明文为:",string)
  17. decode_str(mima,key)
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-6-4 23:02:58 | 显示全部楼层
本帖最后由 qaz123765 于 2017-6-5 01:02 编辑

有没有可能三个列表里面不是前三多的加在一起最多
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-4-8 21:24:52 | 显示全部楼层
  1. data = [
  2.     91,33,6,22,85,41,28,6,30,22,25,78,28,19,78,57,26,6,29,89,78,16,29,15,3,1,11,1,85,95,90,85,95,83,60,0,83,1,6,22,85,12,22,18,7,29,27,7,29,18,78,7,29,11,83,34,1,1,17,78,18,25,28,22,20,10,10,85,11,11,28,29,7,16,10,93,85,38,22,85,25,18,6,78,4,28,26,27,85,41,28,17,66,83,20,0,23,85,6,22,85,25,18,6,78,52,26,10,93,85,92,83,61,11,83,2,15,0,85,7,29,85,26,27,16,78,17,16,9,26,27,0,26,27,9,83,2,7,7,29,78,52,26,10,93,85,93,83,61,11,83,22,28,22,20,26,22,17,78,22,3,11,1,12,26,27,28,0,20,85,26,27,16,28,22,85,7,0,91,78,61,26,26,27,28,0,20,85,11,11,28,29,7,6,78,7,29,15,7,85,6,22,85,10,26,17,0,84,1,78,30,20,5,22,91,78,71,85,34,26,19,11,83,28,26,0,16,2,21,85,25,18,6,78,26,27,78,27,28,3,95,85,15,29,17,78,7,29,7,0,85,2,26,19,11,83,18,7,5,16,29,83,25,7,20,29,26,83,1,1,83,16,24,22,7,23,28,27,11,93,85,91,83,33,6,22,85,2,26,18,6,7,85,29,27,28,0,22,6,78,7,29,28,28,0,9,27,85,26,27,16,78,23,20,28,24,27,11,0,6,66,83,20,0,23,85,26,27,16,78,23,20,28,24,27,11,0,6,78,16,20,0,83,27,11,5,16,28,83,16,22,7,28,0,20,0,7,0,29,78,26,1,64,83,67,78,52,26,10,83,6,11,29,1,78,57,26,6,29,85,26,27,16,78,49,20,30,7,28,29,7,85,89,83,1,1,83,1,11,31,25,78,22,3,11,1,12,1,29,16,78,18,23,1,6,1,78,7,29,11,83,25,7,20,29,26,83,6,1,83,1,6,18,1,78,22,3,11,1,12,1,29,16,78,30,28,9,27,1,78,17,16,2,26,16,24,22,85,12,22,22,15,6,6,11,83,26,8,83,29,7,0,85,26,22,6,26,26,24,1,29,12,64,83,77,78,57,26,6,29,85,6,26,24,29,22,25,8,83,2,15,0,85,0,28,1,78,7,29,11,83,25,7,20,29,26,72,85,6,22,85,25,18,6,78,28,27,2,10,85,15,83,2,7,7,27,11,0,6,78,7,26,78,7,29,11,83,25,7,20,29,26,93,85,87,83,33,6,22,85,1,29,16,78,4,29,1,83,28,29,83,1,6,22,85,26,1,0,11,83,25,7,20,29,26,95,85,25,27,26,78,20,28,24,22,6,78,31,28,9,27,1,78,7,26,78,22,3,11,1,12,1,29,16,66,83,2,15,0,85,9,28,28,0,20,85,26,28,85,13,28,24,11,83,28,0,7,26,78,7,29,11,83,2,1,1,25,10,93,85,95,67,85,44,6,1,78,18,25,26,27,26,27,20,29,78,7,29,11,83,2,1,1,25,10,83,2,15,0,85,3,18,17,11,83,1,6,1,26,27,20,29,78,27,28,3,95,85,26,27,16,78,4,26,28,31,17,78,23,28,10,29,82,26,83,7,11,16,26,9,29,28,20,22,85,6,26,24,78,4,29,11,29,85,6,22,85,13,18,24,11,93,85,95,66,85,43,5,16,0,83,28,0,83,29,7,0,85,1,4,27,78,31,20,0,23,85,15,29,17,78,18,24,1,29,18,78,27,28,29,83,26,25,29,85,30,22,26,30,31,16,66,83,29,11,83,2,15,0,85,0,28,1,78,18,22,13,22,5,26,22,17,64,83,68,92,83,55,27,7,85,26,28,85,15,31,25,78,4,29,1,83,23,11,31,28,11,5,16,10,83,29,7,30,85,15,29,17,78,18,22,13,22,5,26,22,17,78,27,28,3,95,85,6,22,85,9,18,3,11,83,1,6,22,85,28,26,18,6,7,85,26,28,85,12,22,22,1,30,16,78,16,29,7,31,17,28,22,27,78,28,19,78,52,26,10,93,85,95,64,85,58,27,16,23,83,20,28,22,85,28,22,23,1,1,27,79,83,33,6,26,6,78,26,6,78,29,26,26,83,20,78,3,29,23,0,28,13,18,25,78,17,28,28,7,29,78,1,16,29,6,25,26,26,27,9,83,19,28,28,24,78,27,0,3,18,27,78,3,20,29,0,28,1,29,85,1,1,85,30,31,20,0,95,85,26,27,28,29,83,7,11,17,28,28,7,29,78,16,26,3,22,6,78,21,7,1,30,85,41,28,17,64,66,65,78,32,26,78,7,29,11,83,34,1,1,17,78,17,16,13,18,24,11,83,29,27,30,20,0,83,20,0,23,85,2,26,3,11,23,85,6,22,7,11,83,26,0,83,16,15,1,1,6,83,20,3,28,27,9,83,0,29,93,85,38,22,85,25,18,6,78,21,0,2,31,85,1,21,85,27,29,19,15,26,25,7,29,18,78,31,26,24,22,85,15,29,17,78,21,20,7,7,29,8,6,25,0,22,6,29,93,85,47,29,17,78,4,16,78,27,20,24,22,85,29,22,16,0,83,29,7,0,85,9,31,26,28,10,89,78,7,29,11,83,18,2,28,7,23,83,26,8,83,1,6,22,85,1,29,25,23,83,38,1,29,85,1,21,85,26,27,16,78,53,20,26,27,16,28
  3. ]


  4. key = (
  5.           max([i ^ 32 for i in data[::3]], key=[j ^ 32 for j in data[::3]].count),
  6.           max([i ^ 32 for i in data[1::3]], key=[j ^ 32 for j in data[1::3]].count),
  7.           max([i ^ 32 for i in data[2::3]], key=[j ^ 32 for j in data[2::3]].count)
  8.        )

  9. decode_word = []
  10. for index in range(len(data)):
  11.     decode_word.append(chr(data[index] ^ key[index % 3]))
  12. print(''.join(decode_word))
复制代码


参考了前面大神:空格最多的思路。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-2-3 01:10:57 | 显示全部楼层
  1. with open("解密.txt") as file:
  2.     f = file.read().split(",")
  3.     list1 = []
  4.     temp = []
  5.     key = ''
  6.     for i in range(3):
  7.         list1=(f[i::3])
  8.         for each in list1:
  9.             temp.append(chr(int(each)^ord(' ')))
  10.         key += max(temp, key=temp.count)
  11.         temp.clear()
  12.         list1.clear()
  13.     print('key的值为:' + key)

  14. def decode(string, key):
  15.     str2 = ''
  16.     keys = key*(len(f)//len(key)) + key[:len(f)%len(key)]
  17.     for i in range(len(keys)):
  18.         str2 += str(chr(int(f[i])^ord(keys[i])))
  19.     return str2

  20. print(decode(f,key))
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-1 23:46

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表