日期:2014-05-18  浏览次数:20863 次

求:16进制字符,解密后成汉字的算法。
86@86@80@8A@80@85@83@8B@ @分割符,86表示4,80表示1

0BEA@04A2@78A8@66CF@0AA8@78D9@ @分隔符,0BEA貌似是“广”字,04A2貌似是“东”字

78A8可能是 “省”字。以为上述的是广东的身份证号码。

哪位大侠,对16进制,移位,交叉啥的熟悉的,帮我把解密算法弄出来。

谢谢。。。

------解决方案--------------------
0BEA ^ B209 = B9E3 广
04A2 ^ B209 = B6AB 东
78A8 ^ B209 = CAA1 省
------解决方案--------------------
"86@86@80@8A@80@85@83@8B@0BEA@04A2@78A8@66CF@0AA8@78D9@"
"44282719广东省云浮市"

借鉴楼上的回复,上面这串是用GB2312的编码。
C# code
const string input = @"86@86@80@8A@80@85@83@8B@0BEA@04A2@78A8@66CF@0AA8@78D9@";
var bytes = new List<byte>();

foreach (var seg in input.Split('@').Where(s => !string.IsNullOrEmpty(s)))
{
    switch (seg.Length)
    {
        case 4:
            var word = BitConverter.GetBytes((Int16) (Int16.Parse(seg, NumberStyles.HexNumber) ^ 0xB209));
            bytes.Add(word[1]);
            bytes.Add(word[0]);
            break;

        case 2:
            bytes.Add((byte) (byte.Parse(seg, NumberStyles.HexNumber) ^ 0xB2));
            break;

        default:
            break;
    }
}

var text = Encoding.GetEncoding("gb2312").GetString(bytes.ToArray());