首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在Java中将JSON转换为Base64字符串?

如何在Java中将JSON转换为Base64字符串?
EN

Stack Overflow用户
提问于 2018-01-18 15:08:35
回答 3查看 17.7K关注 0票数 2

我有一个JsonObject (Gson),我想在发送到服务器之前用Aes256加密这个json,所以我必须先将它转换为Base64。

代码语言:javascript
运行
复制
JsonObject jsonObject = new JsonObject();
jsonObject.addProperty("command", "abc");


String body = Base64.encodeToString(jsonObject.toString().getBytes("UTF-8"), Base64.NO_WRAP);

String finalBody = aesKeyIv.encrypt(body);

但是,它发送格式错误的json,因为它不能正确转换。

编辑:这是用于Android

我的加密方法:

代码语言:javascript
运行
复制
 public String encrypt(String value) throws Exception {
        byte[] encrypted = cipherEnc.doFinal(value.getBytes());
        return Base64.encodeToString(encrypted, Base64.NO_WRAP);
    }
EN

回答 3

Stack Overflow用户

发布于 2018-01-18 15:13:39

您可以导入库:

代码语言:javascript
运行
复制
import org.apache.commons.codec.binary.Base64;

然后,可以使用以下代码将代码编码为Base64:

代码语言:javascript
运行
复制
public byte[] encodeBase64(String encodeMe){
byte[] encodedBytes = Base64.encodeBase64(encodeMe.getBytes());
return encodedBytes ;
} 

对于解码,您可以使用

代码语言:javascript
运行
复制
public String decodeBase64(byte[] encodedBytes){
byte[] decodedBytes = Base64.decodeBase64(encodedBytes);
return new String(decodedBytes)
}

如果您使用的是Java 8,那么您可以直接将Base64类放入包中:

代码语言:javascript
运行
复制
import java.util.Base64; 

将编码转换为Base64的代码将更改为:

代码语言:javascript
运行
复制
public String encodeBase64(byte [] encodeMe){
    byte[] encodedBytes = Base64.getEncoder().encode(encodeMe);
    return new String(encodedBytes) ;
    } 

同样地,您的新解码将随着

代码语言:javascript
运行
复制
public byte[]decodeBase64(String encodedData){
    byte[] decodedBytes = Base64.getDecoder().decode(encodedData.getBytes());
    return decodedBytes ;
    }
票数 2
EN

Stack Overflow用户

发布于 2018-01-18 15:18:06

像加密值一样的byte[]值应该是Base64编码的。

代码语言:javascript
运行
复制
        String aesIv2EncryptedString = Base64.encodeToString(aesIv2Encrypted,
            Base64.NO_WRAP);
        jsonObject.addProperty("asIv", aesIv2EncryptedString);

这使得整个JSON具有文本值的UTF-8文本具有可读性,因为Base64提供二进制数据的ASCII子集。

encrypt方法非常完美,只有String.getBytes() (在许多例子中都可以看到)使用平台编码;当这个软件在Windows上运行时,这种编码将不是UTF-8,而是一些非Unicode (= 256个char子集)编码。因此字符是不可兑换的("?")而且弄错了。所以跨平台可能是:

代码语言:javascript
运行
复制
public String encrypt(String value) throws Exception {
    byte[] encrypted = cipherEnc.doFinal(value.getBytes("UTF-8"));
    return Base64.encodeToString(encrypted, Base64.NO_WRAP);
}

关于解密:

代码语言:javascript
运行
复制
byte[] originalValue = ...;
return new String(originalValue, "UTF-8");
票数 0
EN

Stack Overflow用户

发布于 2018-01-18 15:31:12

您可以使用B儿GURE can &将其转换为Base64,但要确保您有相同的编码和解码算法。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48324408

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档