标题:请高手帮我看看,为什么我解密不出来,asp加密的,我用C#解密出现了点小问题 ...
只看楼主
sixserve
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2010-11-6
结帖率:0
已结贴  问题点数:20 回复次数:9 
请高手帮我看看,为什么我解密不出来,asp加密的,我用C#解密出现了点小问题
程序代码:
Function StrDecode(byval str)
    dim base64 : set base64 = new base64_class
    LenStr=len(str)
    str=StrReverse(str)
    str=mid(str,int(LenStr/2)+1) & mid(str,1,int(LenStr/2))
    base64.bstr = "ABCDEF1234GHIJKLMnopqrs+tuvwxyz09abcdef!ghijklmNOPQRS5678TUVWXYZ"
    base64.blen = 16
    str = base64.decode(str)
    set base64 = nothing
    StrDecode = str
End function


这个是C#版
程序代码:
public static string Decode64(string str)
        {
            String Str = String.Empty;
            foreach (var item in str.Reverse())
            {
                Str += item;
            }
            Str = (Str.Substring((Str.Length / 2) + 1) + Str.Substring(1, (Str.Length / 2)));
            str = Str;
            string Base64Code = "ABCDEF1234GHIJKLMnopqrs+tuvwxyz09abcdef!ghijklmNOPQRS5678TUVWXYZ";

            int page = str.Length / 4;
            System.Collections.ArrayList outMessage = new System.Collections.ArrayList(page * 3);
            char[] message = str.ToCharArray();
            for (int i = 0; i < page; i++)
            {
                byte[] instr = new byte[4];
                instr[0] = (byte)Base64Code.IndexOf(message[i * 4]);
                instr[1] = (byte)Base64Code.IndexOf(message[i * 4 + 1]);
                instr[2] = (byte)Base64Code.IndexOf(message[i * 4 + 2]);
                instr[3] = (byte)Base64Code.IndexOf(message[i * 4 + 3]);
                byte[] outstr = new byte[3];
                outstr[0] = (byte)((instr[0] << 2) ^ ((instr[1] & 0x30) >> 4));
                if (instr[2] != 64)
                {
                    outstr[1] = (byte)((instr[1] << 4) ^ ((instr[2] & 0x3c) >> 2));
                }
                else
                {
                    outstr[2] = 0;
                }
                if (instr[3] != 64)
                {
                    outstr[2] = (byte)((instr[2] << 6) ^ instr[3]);
                }
                else
                {
                    outstr[2] = 0;
                }
                outMessage.Add(outstr[0]);
                if (outstr[1] != 0)
                    outMessage.Add(outstr[1]);
                if (outstr[2] != 0)
                    outMessage.Add(outstr[2]);
            }
            byte[] outbyte = (byte[])outMessage.ToArray(Type.GetType("System.Byte"));
            return System.Text.Encoding.Default.GetString(outbyte);
        }



[ 本帖最后由 sixserve 于 2010-11-7 08:14 编辑 ]
搜索更多相关主题的帖子: 加密 
2010-11-06 13:46
wangnannan
Rank: 18Rank: 18Rank: 18Rank: 18Rank: 18
等 级:贵宾
威 望:87
帖 子:2545
专家分:9359
注 册:2007-11-3
得分:10 
程序代码:
        private static string Decode64(string str)
        {
            string Base64Code = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
            int page = str.Length / 4;
            System.Collections.ArrayList outMessage = new System.Collections.ArrayList(page * 3);
            char[] message = str.ToCharArray();
            for (int i = 0; i < page; i++)
            {
                byte[] instr = new byte[4];
                instr[0] = (byte)Base64Code.IndexOf(message[i * 4]);
                instr[1] = (byte)Base64Code.IndexOf(message[i * 4 + 1]);
                instr[2] = (byte)Base64Code.IndexOf(message[i * 4 + 2]);
                instr[3] = (byte)Base64Code.IndexOf(message[i * 4 + 3]);
                byte[] outstr = new byte[3];
                outstr[0] = (byte)((instr[0] << 2) ^ ((instr[1] & 0x30) >> 4));
                if (instr[2] != 64)
                {
                    outstr[1] = (byte)((instr[1] << 4) ^ ((instr[2] & 0x3c) >> 2));
                }
                else
                {
                    outstr[2] = 0;
                }
                if (instr[3] != 64)
                {
                    outstr[2] = (byte)((instr[2] << 6) ^ instr[3]);
                }
                else
                {
                    outstr[2] = 0;
                }
                outMessage.Add(outstr[0]);
                if (outstr[1] != 0)
                    outMessage.Add(outstr[1]);
                if (outstr[2] != 0)
                    outMessage.Add(outstr[2]);
            }
            byte[] outbyte = (byte[])outMessage.ToArray(Type.GetType("System.Byte"));
            return System.Text.Encoding.Default.GetString(outbyte);
        }

出来混,谁不都要拼命的嘛。 。拼不赢?那就看谁倒霉了。 。有机会也要看谁下手快,快的就能赢,慢。 。狗屎你都抢不到。 。还说什么拼命?
2010-11-06 14:14
sixserve
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2010-11-6
得分:0 
回复 2楼 wangnannan
不对,解密不出来
2010-11-06 14:21
sixserve
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2010-11-6
得分:0 
回复 2楼 wangnannan
加密是这么一个过程
程序代码:
Function StrEncode(byval str)
    dim base64 : set base64 = new base64_class
    base64.bstr = "ABCDEF1234GHIJKLMnopqrs+tuvwxyz09abcdef!ghijklmNOPQRS5678TUVWXYZ"
    base64.blen = 16
    str = base64.encode(str)
    set base64 = nothing
    str=StrReverse(str)
    LenStr=len(str)
    str=mid(str,int(LenStr/2)+1) & mid(str,1,int(LenStr/2))
    StrEncode = str
End function



[ 本帖最后由 sixserve 于 2010-11-6 14:30 编辑 ]
2010-11-06 14:27
wangnannan
Rank: 18Rank: 18Rank: 18Rank: 18Rank: 18
等 级:贵宾
威 望:87
帖 子:2545
专家分:9359
注 册:2007-11-3
得分:0 
你的意思参照你的代码 写个一模一样的c# 代码 是这个意思么?

出来混,谁不都要拼命的嘛。 。拼不赢?那就看谁倒霉了。 。有机会也要看谁下手快,快的就能赢,慢。 。狗屎你都抢不到。 。还说什么拼命?
2010-11-06 14:44
sixserve
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2010-11-6
得分:0 
回复 5楼 wangnannan
嗯,差不多,就是能解出上面代码加密的字符串,
 
程序代码:
public static string Decode64(string str)
        {
            String Str = String.Empty;
            foreach (var item in str.Reverse())
            {
                Str += item;
            }
            Str = (Str.Substring((Str.Length / 2) + 1) + Str.Substring(1, (Str.Length / 2)));
            str = Str;
            string Base64Code = "ABCDEF1234GHIJKLMnopqrs+tuvwxyz09abcdef!ghijklmNOPQRS5678TUVWXYZ";

            int page = str.Length / 4;
            System.Collections.ArrayList outMessage = new System.Collections.ArrayList(page * 3);
            char[] message = str.ToCharArray();
            for (int i = 0; i < page; i++)
            {
                byte[] instr = new byte[4];
                instr[0] = (byte)Base64Code.IndexOf(message[i * 4]);
                instr[1] = (byte)Base64Code.IndexOf(message[i * 4 + 1]);
                instr[2] = (byte)Base64Code.IndexOf(message[i * 4 + 2]);
                instr[3] = (byte)Base64Code.IndexOf(message[i * 4 + 3]);
                byte[] outstr = new byte[3];
                outstr[0] = (byte)((instr[0] << 2) ^ ((instr[1] & 0x30) >> 4));
                if (instr[2] != 64)
                {
                    outstr[1] = (byte)((instr[1] << 4) ^ ((instr[2] & 0x3c) >> 2));
                }
                else
                {
                    outstr[2] = 0;
                }
                if (instr[3] != 64)
                {
                    outstr[2] = (byte)((instr[2] << 6) ^ instr[3]);
                }
                else
                {
                    outstr[2] = 0;
                }
                outMessage.Add(outstr[0]);
                if (outstr[1] != 0)
                    outMessage.Add(outstr[1]);
                if (outstr[2] != 0)
                    outMessage.Add(outstr[2]);
            }
            byte[] outbyte = (byte[])outMessage.ToArray(Type.GetType("System.Byte"));
            return System.Text.Encoding.Default.GetString(outbyte);
        }
我自己也试着改了下,不过好像不行,麻烦版主了
2010-11-06 14:49
sixserve
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2010-11-6
得分:0 
回复 5楼 wangnannan
原来字符 username 加密后字符 32AeBOxAq2AMuAS1AaB9wA
2010-11-06 14:51
wangnannan
Rank: 18Rank: 18Rank: 18Rank: 18Rank: 18
等 级:贵宾
威 望:87
帖 子:2545
专家分:9359
注 册:2007-11-3
得分:0 
哦 要对输出长度做出控制啊

[ 本帖最后由 wangnannan 于 2010-11-6 14:56 编辑 ]

出来混,谁不都要拼命的嘛。 。拼不赢?那就看谁倒霉了。 。有机会也要看谁下手快,快的就能赢,慢。 。狗屎你都抢不到。 。还说什么拼命?
2010-11-06 14:53
sixserve
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2010-11-6
得分:0 
回复 8楼 wangnannan
嗯,不过我对base64不是很熟悉
2010-11-06 15:01
欲与天斗
Rank: 4
等 级:业余侠客
帖 子:88
专家分:270
注 册:2010-10-6
得分:10 
路过
2010-11-13 08:22



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-325167-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.070185 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved