LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1322|回复: 2

[请教]把一段C#代码写成python代码后运行出错?

[复制链接]
发表于 2011-2-22 16:50:24 | 显示全部楼层 |阅读模式
这段代码用来实现对q&*(q密码进行加密,C#代码是从网上下载的,python代码是自己写的。目前的问题是C#加密正确而python代码加密不正确。请大家指点原因,谢谢!
这里是C#代码:
[PHP]
    using System.Text;
    using System.Security.Cryptography;

    namespace QQWeiBo.Common
    {
        public class QQPassword
        {
            /// <summary>
            /// Web QQ encrypt password before send out
            /// </summary>
            /// <param name="password">Oringinal Password</param>
            /// <param name="verifycode">Verify Code which can get from https://ssl.ptlogin2.qq.com/check?uin=52463077&appid=46000101&r=0.9203062986540509</param>
            /// <returns></returns>
            public static string GetEncryptedPassword(string password, string verifycode)
            {
                return Md5Once(Md5ThreeTimes(password).ToUpper() + verifycode.ToUpper()).ToUpper();
            }

            private static string ByteToHex(byte[] buffer)
            {
                StringBuilder builder = new StringBuilder();
                for (int i = 0; i < buffer.Length; i++)
                {
                    builder.Append(buffer.ToString("x2"));
                }
                return builder.ToString();
            }

            private static string Md5ThreeTimes(string input)
            {
                MD5 md = MD5.Create();
                byte[] buffer = md.ooo(input));
                buffer = md.ComputeHash(buffer);
                buffer = md.ComputeHash(buffer);
                return ByteToHex(buffer);
            }

            private static string Md5Once(string input)
            {
                byte[] buffer = MD5.Create().ComputeHash(Encoding.Default.GetBytes(input));
                return ByteToHex(buffer);
            }
        }
    }
[/PHP]

这里是我写的python代码:
[PHP]
    #!/usr/bin/env python3

    import hashlib
    psw='xxxyyy'
    verifycode='!VPT'
    m=hashlib.md5()
    n=hashlib.md5()

    m.update(psw.encode('utf-8'))
    a=m.digest()
    m.update(a)
    b=m.digest()
    m.update(b)
    c=m.hexdigest().upper()
    d=c+verifycode.upper()
    n.update(d.encode('utf-8'))
    print(n.hexdigest().upper())
[/PHP]
 楼主| 发表于 2011-2-22 23:25:50 | 显示全部楼层
我搞定了,哈哈……,上代码
[PHP]
#!/usr/bin/env python3

import hashlib
str='xxkj83665572'
verifycode='!R1U'
m1=hashlib.md5()
m2=hashlib.md5()
m3=hashlib.md5()
m4=hashlib.md5()
m5=hashlib.md5()
n=hashlib.md5()

m1.update(str.encode('utf-8'))
a=m1.digest()
m2.update(a)
b=m2.digest()
m3.update(b)
c=m3.hexdigest().upper()
e=c+verifycode.upper()
n.update(e.encode('utf-8'))
print(n.hexdigest().upper())
[/PHP]
回复 支持 反对

使用道具 举报

 楼主| 发表于 2011-2-23 00:07:52 | 显示全部楼层
把程序重写了一遍,代码如下:
[PHP]
#!/usr/bin/env python3
'''本程序用来对登录qq时提交的密码进行加密,每次加密的结果和网站发送过来的verifycode有关。'''

import hashlib

str='xxxyyy'
verifycode=input('请输入QQ的校验码:').upper()

def getcryptpwd(str,count=1):
    a=str.encode('utf-8')
    for i in range(count):
        m=hashlib.md5()
        m.update(a)
        a=m.digest()
    return(m.hexdigest().upper())

if __name__=='__main__':
    cryptpwd=getcryptpwd(getcryptpwd('xxxyyy',3)+verifycode.upper())
    print('本次加密的结果是:',cryptpwd)

[/PHP]

python真棒!
回复 支持 反对

使用道具 举报

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

本版积分规则

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