Skip to content

场景:java 作为客户端调用已有的一个.net写的server的webservice,输入string,返回字节数组。

问题:返回的值不是自己想要的,跟.net客户端直接调用总是有差距

分析:平台不一样,字节表达不一样 ,经过查询之后,结果如下

.NET和Java中BYTE表达确实不一样,区别如下:

1.有符号和无符号

  • c#中字节byte的范围是0~255;
  • java中字节byte的范围是-128~127:

2.高低位顺序不同

  • 比如16位整数10用16进制000A,在.net转换成byte数组是00 0A,而java/flash/flex等转换是0a 00

那么在.net中如何解决byte[]到sbyte[] 并能与JAVA平台等效沟通呢?

我原来一直在用Utf8编码,后来看别人发过来的文档,用Defaut的ANSI来实现即可。我~。。。。。。

C#
/// <summary>
    /// DES加密解密
    /// </summary>
    public static class IdCardDES
    {
        private static string _key;
        private static string _iv;
 
        static IdCardDES()
        {
            _key = "12345678";
            _iv = _key;
        }
 
        /// <summary>
        /// 钥匙
        /// 已做并发处理
        /// 默认值12345678
        /// </summary>
        public static string Key
        {
            get { return _key; }
            set
            {
                if (string.IsNullOrEmpty(value))
                {
                    return;
                }
                lock (typeof(IdCardDES))
                {
                    _key = value;
                }
            }
        }
 
        /// <summary>
        /// 向量
        /// 已做并发处理
        /// 默认值12345678
        /// </summary>
        public static string IV
        {
            get { return _iv; }
            set
            {
                if (string.IsNullOrEmpty(value))
                {
                    return;
                }
                lock (typeof(IdCardDES))
                {
                    _iv = value;
                }
            }
        }
 
        /// <summary>
        /// 加密
        /// Base64编码处理
        /// </summary>
        /// <param name="content"></param>
        /// <returns></returns>
        public static string Encrypt(string content)
        {
            using (var des = new DESCryptoServiceProvider())
            {
                des.Key = Encoding.ASCII.GetBytes(Key);
                des.IV = Encoding.ASCII.GetBytes(IV);
                using (var ms = new MemoryStream())
                {
                    using (var cs = new CryptoStream(ms, des.CreateEncryptor(), CryptoStreamMode.Write))
                    {
                        var inputByteArray = Encoding.Default.GetBytes(content);
                        cs.Write(inputByteArray, 0, inputByteArray.Length);
                        cs.FlushFinalBlock();
                        return Convert.ToBase64String(ms.ToArray());
                    }
                }
            }
        }
 
        /// <summary>
        /// 解密
        /// Base64编码处理
        /// </summary>
        /// <param name="content"></param>
        /// <returns></returns>
        public static string Decrypt(string content)
        {
            using (var des = new DESCryptoServiceProvider())
            {
                des.Key = Encoding.ASCII.GetBytes(Key);
                des.IV = Encoding.ASCII.GetBytes(IV);
                using (var ms = new MemoryStream())
                {
                    using (var cs = new CryptoStream(ms, des.CreateDecryptor(), CryptoStreamMode.Write))
                    {
                        var inputByteArray = Convert.FromBase64String(content);
                        cs.Write(inputByteArray, 0, inputByteArray.Length);
                        cs.FlushFinalBlock();
                        return Encoding.Default.GetString(ms.ToArray());
                    }
                }
            }
        }
 
 
 
 
    }

参考:

转换自: https://www.cnblogs.com/atwind/p/5234733.html