`
13146489
  • 浏览: 252149 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

base64中:java与c#的不同

    博客分类:
  • java
 
阅读更多
昨天非常的郁闷的处理这个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.
分享到:
评论

相关推荐

    c#和java base64不一致的解决方法

    2. 对字节的处理:在上述代码示例中,可以看到C#代码中有一个将字节转换为`sbyte`的过程,这可能与Java的处理方式不同。Java没有对应的`sbyte`类型,且在处理字节时,可能会对超出ASCII范围的值进行特殊处理。 3. ...

    解决java 与C# MD5 不一致问题 代码

    本文将详细介绍如何解决Java与C#中MD5哈希值不一致的问题,并提供相应的代码示例。 #### 一、MD5算法简介 MD5(Message-Digest Algorithm 5)是RSA数据安全公司设计并发布的一种散列函数,它能够接收任意长度的...

    base64转换遇到问题解决方法

    1. Access restriction:在Eclipse中编写Java代码时,使用了BASE64Decoder,但Eclipse提示:Access restriction : The type BASE64Decoder is not accessible due to restriction on required library C:\Program ...

    JAVA与C#的区别

    JAVA与C#都是编程语言,它们是两个不同的方向的语言,虽然它们都是面向对象的语言,但它们有很多不同之处。本文将从命名空间、数据类型、变量命名、注释、输出、控制流语句、数组、方法传递参数、访问修饰符、继承、...

    将文件进行zip压缩并base64加密和解密

    在Java中,`java.util.Base64`类提供了便捷的接口来实现BASE64编码和解码。以下是如何使用BASE64对文件进行加密和解密的示例: ```java import java.nio.file.Files; import java.nio.file.Paths; import java.util...

    3des加密解密base64编码解码完全与ASP.NET,JAVA,兼容的js

    本资源提供的是一套完整的JavaScript实现,能够与ASP.NET和JAVA平台的3DES加密解密及Base64编码解码功能保持兼容。 首先,3DES的工作原理是在DES的基础上增加了一次加密过程,即使用同一个密钥进行三次加密,这大大...

    RSA加密JAVA转C# JAVA转PHP,C#转JAVA

    例如,JAVA的`KeyPair`可以通过`getEncoded()`方法获取其ASN.1编码,这通常是以Base64编码的PKCS#8格式(私钥)或X.509格式(公钥)。C#的`RSACryptoServiceProvider`可以通过`ExportParameters(true)`(包含私钥)...

    java和C#通用des3加解密

    标题中的“java和C#通用des3加解密”指的是在Java和C#这两种不同的编程语言中实现DES(Data Encryption Standard)的加强版——3DES(Triple DES)加解密算法。3DES是一种广泛使用的对称加密算法,通过三次应用DES的...

    PDF和Base64格式互相转换

    Java中,`java.util.Base64`类负责Base64编码,`com.itextpdf.text.pdf.PdfReader`和`com.itextpdf.text.pdf.PdfWriter`则处理PDF文件。对于其他语言如JavaScript,可以使用`atob()`和`btoa()`函数进行Base64的编码...

    js base64 解码解决中文乱码问题

    使用方法:utf8to16(base64decode(你的加密字符串));

    C#、java 字符流跨平台数据解压缩

    压缩的结果采用Base64编码,方便在Java端或者C#端打印出来调试,也方便在不同的应用间传输(如webservice),缺点是比转码前体积变大了约35% 字符串采用UTF-8编码获得byte数组,保证两端通用,如果应用对编码有要求...

    PNG_to_Base64: 针对图片文件(PNG/JPG/BMP),生成Base64字符串文件。

    这个小小工具,只是针对Base64字符串的浅显技术研究与实验。 用C# .NET语言编写,运行时需要.NET Framework环境支撑。 免安装,在Windows平台上可直接运行。在中文简体的Windows 10专业版上,测试通过。 自由分享...

    zxing生成二维码,图片Base64编码

    3. Base64编码:使用Java 8及以上版本提供的`java.util.Base64`工具类对字节数组进行编码。 结合以上步骤,我们可以编写一个完整的程序,实现ZXing生成二维码并进行Base64编码的功能。这个程序可能包含一个主函数,...

    Java中3DES加密与C#兼容

    "Java中3DES加密与C#兼容"这个主题就是关注如何在Java和C#这两种不同的编程语言中实现相同的数据加密机制,确保数据的安全传输。3DES(Triple DES)是一种广泛使用的对称加密算法,它通过三次应用DES(Data ...

    C#RSA加密与JAVA解密,实现相互通信

    "C# RSA加密与JAVA解密,实现相互通信"的主题聚焦于如何利用RSA公钥/私钥加密算法在C#和Java两个不同的编程环境中实现安全的数据交换。RSA是一种非对称加密算法,它使用一对密钥——公钥和私钥,公钥用于加密,私钥...

    BASE64编码方法

    总结,BASE64编码是二进制数据与ASCII字符之间的一种转换方式,在Delphi中可以使用Indy库轻松实现。无论是在加密解密过程中还是在其他需要转换二进制数据为文本形式的应用中,BASE64编码都是一个实用的工具。

    图片BASE64加密保存到数据库Blob类型中(放入数据库,并取出生成图片)

    本示例主要涉及的是如何将图片通过BASE64编码加密后存入数据库的Blob类型字段,并能从数据库中取出这些数据再还原成原始图片。以下是相关知识点的详细说明: 1. **BASE64编码**:BASE64是一种用于将二进制数据转换...

    C#和Java实现互通的RSA&DES加解密算法

    在C#中,通常使用Base64编码存储密钥,而在Java中也应做同样的处理。DES则需要确保填充模式、初始向量(IV)以及密钥的生成方式一致。 在实际项目中,你可能需要编写C#和Java的示例代码来演示如何使用这些加密算法...

    PDF格式文件转成base64编码,将base64的编码转成PDF格式文件。

    BASE64Encoder和BASE64Decoder这两个方法是sun公司的内部方法,并没有在java,api中公开过,所以使用这些方法是不安全的,将来随时可能会从中去除,所以相应的应该使用替代的对象及方法,建议使用apache公司的API。

    AES java 与 C#加密解密

    为了使Java和C#之间能够正确解密对方加密的数据,可以使用Base64编码来转换字节数组为字符串,这样可以在两个平台间方便地传递。在发送加密数据前,使用`java.util.Base64`或`System.Convert.ToBase64String()`进行...

Global site tag (gtag.js) - Google Analytics