免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: tearyrose
打印 上一主题 下一主题

一个加密算法,请高手支招 [复制链接]

论坛徽章:
0
11 [报告]
发表于 2008-08-26 18:47 |只看该作者

  1. import sha
  2. import base64

  3. slat='lOsxLBVLM1rz9jl/rdLdhQ=='
  4. pwd='111111'

  5. def encrypt(pwd, salt):
  6.     bsalt = base64.b64decode(salt)
  7.     bpwd= '\x31\x00'*6

  8.     ball = bsalt + bpwd

  9.     ep = sha.new(ball).digest()

  10.     return base64.b64encode(ep)

  11. print encrypt(pwd, slat)
复制代码


这个可以了


  1. 0WUSbhDIJnai6BYP309b3uPe/ig=
复制代码


但一般的 pass 怎么做我不清楚。

论坛徽章:
0
12 [报告]
发表于 2008-08-26 20:15 |只看该作者
原帖由 retuor 于 2008-8-26 18:47 发表

import sha
import base64

slat='lOsxLBVLM1rz9jl/rdLdhQ=='
pwd='111111'

def encrypt(pwd, salt):
    bsalt = base64.b64decode(salt)
    bpwd= '\x31\x00'*6

    ball = bsalt + bpwd

  ...

这个是不是有点问题?encrypt中没有用到pwd呀……

论坛徽章:
0
13 [报告]
发表于 2008-08-26 22:26 |只看该作者
不是这个意思。我在研究 '111111' 被 asp 编码成什么了。

python 下 '111111' encode 出来的好像就是 '111111'。

楼主的 asp 模块把 '1' 编码成 '\x01x00',所以 '111111' 变成 '\x01\x00'*6. 但其它字符串怎么处理,我并没有头绪。

不知道 asp 那个编码是怎样规定的。

论坛徽章:
0
14 [报告]
发表于 2008-08-27 08:15 |只看该作者
不错,retuor的代码可以得到正确结果

有哪位知道这种编码转换怎么实现吗?

论坛徽章:
0
15 [报告]
发表于 2008-08-27 15:15 |只看该作者
根据retuor的方法,我想到了一个比较“恶心”的解决办法:取密码的每一个字节的ascii码转换成16进制——hex(ord(pwd)),然后加上\x00连到一起.....

哪位大哥有比较常规的解决方法,不妨指点一下,用上面这个方法实在是很“恶心”

论坛徽章:
0
16 [报告]
发表于 2008-08-27 15:48 |只看该作者
现在它加0,是因为 `1' 是个 ascii 字符。如果是中文,情况可能会有不同。你试过了吗?

你可以查一下 Encode.Unicode.Getbytes 的文档,看里面怎么说的。

能不能再给两组数据,全中文的 pass 和中英混合的 pass. 有了这些数据后,看能不能猜出 asp 的行为。

论坛徽章:
0
17 [报告]
发表于 2008-08-27 16:11 |只看该作者
呵呵,中文的情况不用考虑,密码不可能是中文的

Encode.Unicode.Getbytes 这个就是吧单字节ascii码字符串转为双字节的字节数组,比如1的ascii码是31,两个1的ascii码就是31 31,转成unicode编码之后就成了31 00 31 00,用两个字节表示一个字符

论坛徽章:
0
18 [报告]
发表于 2008-08-27 16:53 |只看该作者
如果你确信是这样的话,也不会太恶心,主要是因为 python 很强大。


  1. import sha
  2. import base64

  3. slat='lOsxLBVLM1rz9jl/rdLdhQ=='
  4. pwd='111111'

  5. def encrypt(pwd, salt):
  6.     bsalt = base64.b64decode(salt)
  7.     bpwd=''.join([i+'\x00' for i in pwd])   # 就一句

  8.     ball = bsalt + bpwd

  9.     ep = sha.new(ball).digest()

  10.     return base64.b64encode(ep)

  11. print encrypt(pwd, slat)
复制代码

[ 本帖最后由 retuor 于 2008-8-27 16:58 编辑 ]

论坛徽章:
0
19 [报告]
发表于 2008-08-27 16:58 |只看该作者
这样更好


  1. bpwd='\x00'.join(pwd)+'\x00'
复制代码

论坛徽章:
0
20 [报告]
发表于 2008-08-30 08:25 |只看该作者
python真是灵活啊

多谢retuor !
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP