昨天非常的郁闷的处理这个base64的问题,同样的一个图片文件,在java和c#进行base64编码后结果不一样,让我苦恼很久。
在网上搜索很久,有篇文章提到有可能是如下问题:
byte在java和c#的不同范围的问题:
Java byte : -128 to 127
C# byte : 0 to 255
我经过对比确实确实是这样的。但是后来解决问题后,发现问题根本就没有出在这里。。。
其根本原因在于字符集的问题。
我使用commons-io中的方法读取图片:
FileUtils.readFileToString(new File(path));
查看方法说明才发现,该方法把图片读成uft8的string了。
我后来把方法改为读取到byte[]并且为ascii编码
FileUtils.readFileToByteArray(new File(path));
这样再base64的结果就和C#的一致了。.
综上:这个问题跟java和c#的byte表示范围没有关系。主要你的原始内容(包括字符集)一样,那么结果就一样的。base64算法一般都是一样的,特别情况可能是base64的算法不一样。
我在stackoverflow也发表了个问题。老外也热心的回答了。
http://stackoverflow.com/questions/8518321/base64-difference-between-c-sharp-and-java
老外的回答如下:
You're base64 encoding a string? What do you want that to do? You first need to convert the string to a sequence of bytes, choosing an encoding such as UTF-8 or UTF-16.
My guess is that you managed to use different encodings on both sides. Java's String.GetBytes() uses the default charset (Probably something like Latin1 on western windows versions). For C# you didn't post the relevant code.
To fix this, choose an encoding and use it explicitly on both sides. I recommend using UTF-8.
On the Java side you should use the correct method for encoding, so you don't end up with "modified UTF-8", but since I'm not a java programmer, I don't know which methods output modified UTF-8. I think it only happens if you abuse some internal serialization method.
signed vs. unsigned bytes should not be relevant here. The intermediate byte buffer will be different, but the original string, and the base64 string should be identical on both sides.
分享到:
相关推荐
最近非常郁闷的处理这个base64的问题,同样的一个图片文件,在java和c#进行base64编码后结果不一样,苦恼了很久,下面这篇文章主要给大家介绍了关于c#和java base64不一致的解决方法,需要的朋友可以参考下
使用方法:utf8to16(base64decode(你的加密字符串));
压缩的结果采用Base64编码,方便在Java端或者C#端打印出来调试,也方便在不同的应用间传输(如webservice),缺点是比转码前体积变大了约35% 字符串采用UTF-8编码获得byte数组,保证两端通用,如果应用对编码有要求...
BASE64Encoder和BASE64Decoder这两个方法是sun公司的内部方法,并没有在java,api中公开过,所以使用这些方法是不安全的,将来随时可能会从中去除,所以相应的应该使用替代的对象及方法,建议使用apache公司的API。
3des加密解密 base64编码解码的源代码 完全与标准算法一致,与C# java 结果一致
图片BASE64加密保存到数据库Blob类型中(放入数据库,并取出生成图片),完整的demo例子,可运行。
同时生成了缩略图和正常图片的base64值,缩略图用于页面进行显示,正常图片进行后续打开查看。测试了安卓和ios的微信端,一切正常。 另外由于缓存资源的原因没有考虑上传按钮的添加,上传图片即上传,ajax为异步...
c语言实现aes ecb模式加密,可以和java,c#,obj-c互相 加,解密。包含base64编码,urlEncode编码 注意,该算法里面的密文是转换成16进制的字串,如果不要16进制,可自行转换,内的函数。 vc6,vs2008,可编译。
C#加密 解密对接java 的加密AES/CBC/PKCS7Padding 转16进制 C#加密解密中的详细整理
网上大多DES加密都是经BASE64加密后返回,这本身就是有问题的,现在上传不经过BASE64加密的版本,另加java解密代码,测试通过。
DES加密解密,C#源码包含多种加密方式(DES、ECB、base64、md5等) des加密解密C#与java通用亲测
BASE64编码规则 及在java C# VB 中的代码实现
delphi的BASE64编码方法,再做加密和解密的开发中可以用到,delphi测试可以用,加密和解密与java和c#进行对比一致。
网络安全问题日益严峻的今天,原始密码和简单非可逆加密算法已经不足以提供安全的系统服务,所以加盐加密技术使用越来越普遍。 本文档系统的介绍了加盐加密的原理和实现方案。 由四哥许坤整理发布,...
C#直接调用java类(jar或.class文件),无需转化为.net组件,更快速、稳定 SatJni是C++编写的动态链接库,实现了...示例中演示了通过java调用webservice服务(无需代理对象)得到电话号码和天气信息、调用Base64和MD5等。
C# 加密 JAVA 解密源码 using System; using System.IO; using System.Security.Cryptography; namespace WindowsApplication1 { /// /// Security 的摘要说明。 /// public class Security { const string...
image-base64-md5-api 一个将Image转换为base64和md5哈希的API 它以图像作为表单数据(即enctype ='multipart / form-data'),并返回其base64版本的JSON响应以及应用于其的MD5哈希。 测试和使用。 导航到 ,将有...
RSA公私钥pkcs8格式, 不能被C#程序所用,需要转转换为C#用的xml格式。这是转换用的c#源程序。
完全与标准算法一致的asp的3des,base64,SHA1源码, 经过测试完全与C# java的标准算法一致
java语言,支持把xml进行base64加密后作为参数,或者使用未加密的xml作为参数,直接生成png图片,具体逻辑可在代码中自行调整。