免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 6340 | 回复: 9
打印 上一主题 下一主题

python加密解密小程序(面试题) [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-03-05 16:19 |只看该作者 |倒序浏览
本帖最后由 307183927 于 2012-03-05 16:45 编辑

将6位以内的整数加密成10位数的数字+字母的字符串
要求:
      1.可解密
      2.差异性大,任何两个相邻数字,加密后的字符串要相差非常大

论坛徽章:
0
2 [报告]
发表于 2012-03-05 16:20 |只看该作者
有兴趣的可以交流下,qq::307183927
:wink:

论坛徽章:
0
3 [报告]
发表于 2012-03-05 18:06 |只看该作者
  1. >>> import base64
  2. >>> v1='mypassword111'
  3. >>> print v1
  4. mypassword111
  5. >>> env1=base64.b64encode(v1)
  6. >>> print env1
  7. bXlwYXNzd29yZDExMQ==
  8. >>> base64.b64decode('bXlwYXNzd29yZDExMQ==')
  9. 'mypassword111'
  10. >>>
复制代码

论坛徽章:
0
4 [报告]
发表于 2012-03-05 21:53 |只看该作者
是不是可以用矩阵

用个秩为6的 10*6的整数矩阵A,与原始密码的每位当做一个值,看成一个列向量x,矩阵一乘就可以了,可以得到一个10维的列向量,但是不能保证列向量里的每个值都在36以下。

反变换可以通过解线性方程组来解得,矩阵A就是加密矩阵。

论坛徽章:
0
5 [报告]
发表于 2012-03-05 22:22 |只看该作者
回复 2# 307183927
代码是可以运行,但是看清题目
将6位以内的整数加密成10位数的数字+字母的字符串

论坛徽章:
0
6 [报告]
发表于 2012-03-05 23:43 |只看该作者
围观学习

论坛徽章:
0
7 [报告]
发表于 2012-03-06 11:25 |只看该作者
本帖最后由 307183927 于 2012-03-06 11:25 编辑

坐等高手解答

论坛徽章:
0
8 [报告]
发表于 2012-03-08 17:41 |只看该作者
原来可以使用进制转换:wink:

论坛徽章:
0
9 [报告]
发表于 2012-03-09 10:56 |只看该作者
借用一下DES算法的过程
比如密钥是6位整数+4位附加码,比如 568249 5112
整数明文 153206
加密过程:
将密钥折成两部分 整数前3位+附加码前2位,整数后3位和附加码后2位: 折出来就是56851 和24912
明文也折成两部分 前3位和后3位,折后 153和206
密钥和明文前部分和前部分相加,后部分和后部分相加 56851+153 =  ...  24912+206=...

这样折过之后数据打乱了,相邻的数字有差异,如果差异不大,可以再用类似的方法再来一次折密钥,比如反着来,或者提1,3,5位组成前部分。怎么样加密取决于这个乱的过程。
另外,这个加密最多只能有4次,再加值就有可能超过36,没有字母可用了。


解密的过程就是逆过程了,反着操作就行了。

论坛徽章:
0
10 [报告]
发表于 2012-03-09 12:44 |只看该作者
本帖最后由 moonflow 于 2012-03-09 12:45 编辑

我娱乐一个
  1. import random
  2. def encrypt(s):
  3.     tlist = []
  4.     n = len(s)
  5.     addsize = 10 - n -1
  6.     data = [random.randint(0,10) for i in range(addsize)]
  7.     slist = [n] + data + list(s)
  8.     for element in slist:
  9.         element = (int)(element)*8 + 32
  10.         element = chr((int)(element))
  11.         tlist = tlist + [element]
  12.     tlist = ''.join(tlist)
  13.     return tlist

  14. def decrypt(s):
  15.     tlist = []
  16.     for element in s:
  17.         element = ord(element)
  18.         element = ((int)(element)-32)/8
  19.         element = str(element)
  20.         tlist = tlist + [element]
  21.     numsize = int(tlist[0])
  22.     tlist = tlist[10-numsize:10:1]
  23.     tlist = ''.join(tlist)
  24.     return tlist
  25.    
  26. if __name__ == '__main__':
  27.     s = "4347"
  28.     encryptstr=encrypt(s)
  29.     print encryptstr
  30.     decryptstr=decrypt(encryptstr)
  31.     print decryptstr
复制代码
结果:
  1. @hX`P(@8@X
  2. 4347
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP