.NET和JAVA中BYTE的区别以及JAVA中“DES/CBC/PKCS5PADDING” 加密解密在.NET中的实现
2015-10-16 14:02
871 查看
场景: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来实现即可。我~。。。。。。
参考:
http://fred-han.iteye.com/blog/1935651 http://www.cnblogs.com/Lawson/archive/2012/05/20/2510781.html
问题:返回的值不是自己想要的,跟.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来实现即可。我~。。。。。。
/// <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()); } } } } }
参考:
http://fred-han.iteye.com/blog/1935651 http://www.cnblogs.com/Lawson/archive/2012/05/20/2510781.html
相关文章推荐
- Spring Security(16)——基于表达式的权限控制
- JAVA导出EXCEL并下载
- Spring Security(15)——权限鉴定结构
- Spring+SpringMVC+mybatis+easyui整合实例(六)mybatis一对一、一对多关联查询
- Java enum枚举类型
- java 设计模式简单解析
- SpringMVC返回json数据的三种方式
- Spring定时任务的几种实现
- Java MVC + ORM框架 Nano Framework之环境搭建
- Spring 运行中 动态加载xml并实例化Bean
- hibernate session相关类的几个问题
- 利用spring el做系统日志
- java程序性能优化
- java动态代理
- 当对象类型是一个接口的时候,在Eclipse中如果跳转到该接口对应的实现类
- 关于spring3使用AOP编程时需要引入哪些jar包的问题
- Welcome to JAVA!(第五课课后练习)
- MyEclipse 10破解教程
- Spring JdbcTemplate用法整理
- Hadoop中eclipse 插件的编译 笔记四