场景: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. Jmeter安装与环境部署

    Jmeter安装与环境部署 版权声明:本文为博主原创文章,未经博主允许不得转载. 博主:海宁 联系:whnsspu@163.com

  2. WCF学习之旅—TcpTrace工具(二十五)

    前面的几篇文章,我们学习了怎么开发WCF应用程序与服务,也学习了如何进行WCF的配置.对于Web Service与WCF服务应用,服务端与客户端的通信是通过收发SOAP Message进行,我们如何有 ...

  3. 阿里云服务器的坑=====部署EF+MVC

    异常处理汇总 ~ 修正果带着你的Net飞奔吧!http://www.cnblogs.com/dunitian/p/4599258.html 先参考:http://www.cnblogs.com/dun ...

  4. SQL Saturday 北京将于7月25日举办线下活动,欢迎参加

          地点:北京微软(中国)有限公司[望京利星行],三层308室     报名地址:https://onedrive.live.com/redir?page=survey&resid=f ...

  5. CRL快速开发框架系列教程四(删除数据)

    本系列目录 CRL快速开发框架系列教程一(Code First数据表不需再关心) CRL快速开发框架系列教程二(基于Lambda表达式查询) CRL快速开发框架系列教程三(更新数据) CRL快速开发框 ...

  6. android 在 ListView 的 item 中插入 GridView 仿微信朋友圈图片显示。

    转载请声明出处(http://www.cnblogs.com/linguanh/) 先上张效果图: 1,思路简述 这个肯定是要重写 baseAdapter的了,这里我分了两个数据适配器,一个是自定义的 ...

  7. 代码的坏味道(8)——被拒绝的馈赠(Refused Bequest)

    坏味道--被拒绝的馈赠(Refused Bequest) 特征 子类仅仅使用父类中的部分方法和属性.其他来自父类的馈赠成为了累赘. 问题原因 有些人仅仅是想重用超类中的部分代码而创建了子类.但实际上超 ...

  8. 绝对干货,教你4分钟插入1000万条数据到mysql数据库表,快快进来

    我用到的数据库为,mysql数据库5.7版本的 1.首先自己准备好数据库表 其实我在插入1000万条数据的时候遇到了一些问题,现在先来解决他们,一开始我插入100万条数据时候报错,控制台的信息如下: ...

  9. 最适合作为Java基础面试题之Singleton模式

    看似只是最简单的一种设计模式,可细细挖掘,static.synchronized.volatile关键字.内部类.对象克隆.序列化.枚举类型.反射和类加载机制等基础却又不易理解透彻的Java知识纷纷呼 ...

  10. [WinForm]WinForm跨线程UI操作常用控件类大全

    前言 在C#开发的WinForm窗体程序开发的时候,经常会使用多线程处理一些比较耗时之类的操作.不过会有一个问题:就是涉及到跨线程操作UI元素. 相信才开始接触的人一定会遇上这个问题. 为了解决这个问 ...