场景: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来实现即可。我~。。。。。。

/// <summary>
/// DES加密解密
/// </summary>
public static class IdCardDES
{
private static string _key;
private static string _iv; static IdCardDES()
{
_key = "";
_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, , 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, , 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

.NET和JAVA中BYTE的区别以及JAVA中“DES/CBC/PKCS5PADDING” 加密解密在.NET中的实现的更多相关文章

  1. java/php DES/CBC/PKCS5Padding加密解密算法实现过程

    先看java代码 public static String encrypt(String message, String key) throws Exception { Cipher cipher = ...

  2. OC的DES加密,使与java的Cipher类用DES/CBC/PKCS5Padding方式的加密结果同样

    问题说明: 近期用到DES加密,而且要与java的Cipher类加密的结果保持一致.没研究过java的Cliper,但工作中Cipher依据DES/CBC/PKCS5Padding加密方式生成了一个字 ...

  3. JS和PHP和JAVA的正则表达式的区别(java没有分解符,java中的转义字符是\\)

    JS和PHP和JAVA的正则表达式的区别(java没有分解符,java中的转义字符是\\) 一.总结 js正则:var patrn=/^[0-9]{1,20}$/; php正则:$pattern='/ ...

  4. C#中使用DES和AES加密解密

    C#中使用DES和AES加密解密 2008-01-12 09:37 using System;using System.Text;using System.Security.Cryptography; ...

  5. java.security.NoSuchAlgorithmException: Cannot find any provider supporting DESede/CBC/PKCS5Padding

    最近在做3DES加密,在本地window下面运行ok的程序,放到linux环境上竟然报错: Java.security.NoSuchAlgorithmException: Cannot find an ...

  6. Java DES 加解密("DES/CBC/PKCS5Padding")

    /** * DES加密 * * @param data 加密数据 * @param key 密钥 * @return 返回加密后的数据 */ public static byte[] desEncry ...

  7. JAVA中使用RSA通过秘钥文件对字符串进行加密解密

    技术交流群: 233513714 //字符串进行加密算法的名称 public static final String ALGORITHM = "RSA"; //字符串进行加密填充的 ...

  8. PHP实现DES/ECB/PKCS5Padding加密兼容Java SHA1PRNG算法

    在使用php调用java接口时,遇到了两边加密结果不一致的问题.经过沟通发现接口方使用了SHA1PRNG算法,对原密码计算后做为Des的加密Key. 因此在php中也需要先对原密码做相应计算才能保持结 ...

  9. JAVA AES CBC PKCS5Padding加解密

    package com.hzxc.groupactivity.util; /** * Created by hdwang on 2019/1/17. */ import org.slf4j.Logge ...

随机推荐

  1. ASP.NET MVC5+EF6+EasyUI 后台管理系统(60)-系统总结

    系列目录 前言: 起初写这个框架的时候,可以说在当时来说并不是很流行的设计模式,那是在2012年,面向对象的编程大家都很熟悉, 但是“注入.控制反转(DI,IOC,依赖注入).AOP切面编程”新兴名词 ...

  2. 计算机程序的思维逻辑 (50) - 剖析EnumMap

    上节我们提到,如果需要一个Map的实现类,并且键的类型为枚举类型,可以使用HashMap,但应该使用一个专门的实现类EnumMap. 为什么要有一个专门的类呢?我们之前介绍过枚举的本质,主要是因为枚举 ...

  3. JavaScript知识点总结(命名规范,变量的作用域)

    命名规范 有人说JavaScript的宽容性是这个语言最糟糕的方面之一.比如说想把2个数字加在一起,JavaScript会把其中一个数字解析成字符串,那么就会得到一个奇怪的字符串,而不是2个数字的和. ...

  4. 你真的会玩SQL吗?透视转换的艺术

    你真的会玩SQL吗?系列目录 你真的会玩SQL吗?之逻辑查询处理阶段 你真的会玩SQL吗?和平大使 内连接.外连接 你真的会玩SQL吗?三范式.数据完整性 你真的会玩SQL吗?查询指定节点及其所有父节 ...

  5. PID控制

    PID解释: 位置式:      可以看出,比例部分只与当前的偏差有关,而积分部分则是系统过去所有偏差的累积.位置式PI调节器的结构清晰,P和I两部分作用分明,参数调整简单明了.但直观上看,要计算第拍 ...

  6. Win10 连接L2TP VPN 失败解决方法

    Win10 连接L2TP VPN 失败解决方法 iOS系统不知道在什么时候,已经不支持PPTP VPN.偶尔的机会刚好看到github上的一键式VPN服务器部署脚本setup-ipsec-vpn,就在 ...

  7. Angularjs环境搭建

    Angularjs架构搭建      1.搭建Angularjs项目           1)在package.json中配置如下,然后 npm install下载包     {   "na ...

  8. 翻译:使用 ASP.NET MVC 4, EF, Knockoutjs and Bootstrap 设计和开发站点 - 5 - 数据库设计

    数据库方面我们需要的主要功能如下: 联系人有姓名和电子邮件地址. 联系人可以拥有多个地址. 联系人可以拥有多个电话. 为了实现目标,我们需要在数据库中创建下列表.表与表的关系如下图所示: 数据库的脚本 ...

  9. WPF DataGrid 行选中相关

    DataGrid选中行是有自带SelectionChanged的,可是当需要重复选中同一行时,该事件就不会触发了. 后来反复查资料找到了DataGrid上有个DataGridRow. DataGrid ...

  10. Docker的ubuntu镜像安装的容器无ifconfig和ping命令的解决

    Docker的Ubuntu镜像安装的容器无ifconfig命令和ping命令 解决: apt-get update apt install net-tools       # ifconfig apt ...