none
AES加密问题,请帮助,HELP!!! RRS feed

  • 问题

  • 非常想知道,下面这段AES加密代码,用C#解密中文没有问题,可是通过JAVA解密出来的却是乱码?怎么办啊?

    thanks,谢谢!

    Please help me !

           public byte[] Encrypt(byte[] EncryptDatas)
            {
                byte[] encodedbytes = null;
                MemoryStream ms = null;
                CryptoStream cs = null;

                if (EncryptDatas.Length == 0)
                {
                    return null;
                }

                //创建AES实例
                AesManaged aesmanaged = new AesManaged();
                //创建AES加密器
                ICryptoTransform encryptor = aesmanaged.CreateEncryptor(key, iv);

                try
                {
                    using (ms = new MemoryStream())
                    {
                        using (cs = new CryptoStream(ms, encryptor, CryptoStreamMode.Write))
                        {
                            cs.Write(EncryptDatas, 0, EncryptDatas.Length);
                            cs.FlushFinalBlock();

                            ms.Position = 0;
                            encodedbytes = new byte[ms.Length];

                            ms.Read(encodedbytes, 0, encodedbytes.Length);
                        }
                    }
                }
                catch
                {
                    encodedbytes = null;
                }
                finally
                {
                    //释放对象
                    if(ms != null)
                        ms.Close();
                    if (cs != null)
                    {
                        cs.Clear();
                        cs.Close();
                    }
                }

                return encodedbytes;
            }


    Stephen Chen

    2012年8月20日 1:49

答案

  • 楼主可以把java aes解密部分贴出来帮您看下?

    本人也是用这种方法传输请求数据的,单看c#部分看不出问题来

    2012年8月28日 7:17

全部回复

  • 为什么Windows Phone上面没有Encoding.Default.GetBytes(xml);方法呢?

    我该怎样处理它呢!


    Stephen Chen

    2012年8月20日 8:59
  • 编码中出现乱码都是由char 到 byte 或 byte 到 char 转换中编码和解码的字符集不一致导致。关于Java的问题,建议在这里提问,

    http://www.java-forums.org/forum.php 

    如果是Wp的问题,请贴出代码大家共同探讨。

    2012年8月21日 8:46
  • 编码中出现乱码都是由char 到 byte 或 byte 到 char 转换中编码和解码的字符集不一致导致。关于Java的问题,建议在这里提问,

    http://www.java-forums.org/forum.php 

    如果是Wp的问题,请贴出代码大家共同探讨。

    我不是JAVA的问题,主要是JAVA作为服务器,有IOS,ANDROID,WP,WM等共用,就是WP不能解析中文,在WM中有个

    ENCODING.DEFAULT的方法,而WP没有,到底是不是这个问题,应该怎么解决呢?详细代码如下

    下面是HTTPWEBREQUEST请求

     STRING XML = "<?XML VERSION = "1.0" ENCODING= "UTF-8"?><ROOT><VALUE>你好</VALUE></ROOT>";                                         

    public void HttpPostRequest(string url,string xml,string posttype)
            {
                url = App.Url + url;//设置请求地址
                Xml = xml;
                PostType = posttype;

                try
                {
                    //创建WebRequest类
                    HttpWebRequest request = HttpWebRequest.CreateHttp(new Uri(url));

                    //设置请求方式GET POST
                    request.Method = "POST";
                    //request.ContentType = "application/octet-stream";// "application/binary";


                    //返回应答请求异步操作的状态
                    request.BeginGetRequestStream(RequestCallback, request);
                }
                catch (WebException e)
                {
                    string msg = e.Message;
                    if (msg == "")
                        msg = "网络未知异常。";
                    //网络相关异常处理
                    ExceptionInfo = "很抱歉,网络出现问题,请稍候重试!";
                }
                catch (Exception e)
                {
                    string msg = e.Message;
                    if (msg == "")
                        msg = "未知异常。";
                    //异常处理
                    ExceptionInfo = "很抱歉,由于以下原因发生错误:\r\n\r\n" + msg;
                }
            }

            //请求服务回调,具体就是这里的问题了
            private void RequestCallback(IAsyncResult result)
            {
                try
                {

                    var req = result.AsyncState as HttpWebRequest;
                    using (var s = req.EndGetRequestStream(result))
                    {  

                        var b = App.aes.Encrypt(Xml);//看这里,通过AES加密的字母和数据,解析是没有问题的,但是中文就有问题了
                        if (b == null)
                            return;
                        s.Write(b, 0, b.Length);
                        s.Flush();
                    }
                    req.BeginGetResponse(ResponseCallback, req);
                }
                catch (WebException e)
                {
                    string msg = e.Message;
                    if (msg == "")
                        msg = "网络未知异常。";
                    //异常处理
                    ExceptionInfo = "很抱歉,网络出现问题,请稍候重试!";
                }
                catch (Exception e)
                {
                    string msg = e.Message;
                    if (msg == "")
                        msg = "未知异常。";
                    //异常处理
                    ExceptionInfo = "很抱歉,由于以下原因发生错误:\r\n\r\n" + msg;
                }
            }


    //加密
            public byte[] Encrypt(string EncryptDatas)
            {
                byte[] returnbytes = null;

                try
                {
                    using (ms = new MemoryStream())
                    {
                        using (cs = new CryptoStream(ms, new AesManaged().CreateEncryptor(key, iv), CryptoStreamMode.Write))
                        {
                            byte[] data = utf8.GetBytes(EncryptDatas);//看这里,到底是不是有问题,字母和数据,解析是没有问题的,中文就有问题了
                            cs.Write(data, 0, data.Length);    
                            cs.FlushFinalBlock();                                                                                     
                            returnbytes = ms.ToArray();
                        }
                    }
                }
                catch
                {
                    returnbytes = null;
                }
                finally
                {
                    if (ms != null)
                        ms.Close();
                    if (cs != null)
                    {
                        cs.Clear();
                        cs.Close();
                    }
                }
                return returnbytes;
            }


    Stephen Chen

    2012年8月22日 1:24
  • 我还没有解决编码问题,具体情况我再说详细点吧:

    1.服务端是JAVA做的

    2.客户端是C#做的

    3.客户端有WM,Android,IOS,WINCE,WP7

    4.WP7中,通过我以上的代码,做一次查询,如果通过关键字“张三”来查,服务端解析成了乱码(WM,IOS等都可以,不要说改服务器),如果通过张三的电话号码来查询的话,服务端正确解析,WP7可以得到查询的结果

    5.总之,我做查询中只要有中文就查询失败

    这到底是什么问题?WP7中应该怎么办?


    Stephen Chen

    2012年8月22日 7:59
  • 楼主可以把java aes解密部分贴出来帮您看下?

    本人也是用这种方法传输请求数据的,单看c#部分看不出问题来

    2012年8月28日 7:17
  • 已经解决,原来真的是JAVA的编码问题,谢谢回复!

    Stephen Chen

    2012年8月28日 8:50