关于Java和C#的Base64互用问题

本文以C#去适配Java,不去动Java代码;看结果直接翻到底

问题

最近和Java做对接,涉及AES加密解密,Java那边传递加密后的Base64字符,C#解密。但就是解不开,上网搜索查到了些内容,大致是C#和Java的Base64略有不一样

java部分如下

// Java代码

// 加密为base64字符
String base64EncodedCipherText= Base64.getUrlEncoder().encodeToString(decodedCipherText );
// 解密base64字符
byte[] decodedCipherText = Base64.getUrlDecoder().decode(base64EncodedCipherText); 

C#原本如下 这是错误实例

// C#代码

// 加密为base64字符
string base64EncodedCipherText = Convert.ToBase64String(decodedCipherText );
// 解密base64字符
byte[] decodedCipherText = Convert.FromBase64String(base64EncodedCipherText );

我原以为C#也直接使用base64转byte就可以了,没想到一直提示非法的base64字符

输入的不是有效的 Base-64 字符串,因为它包含非 Base-64 字符、两个以上的填充字符,或者填充字符间包含非法字符。

加入两个Java与C#Base64转换方法
// C#代码

// C#的Base64转java的Base64
private static string Base64CsharpToJava(string base64EncodedCipherText)
{
    char[] padding = { '=' };
    string dummyData = base64EncodedCipherText.TrimEnd(padding).Replace('+', '-').Replace('/', '_');
    return dummyData;
}

// java的Base64转C#的Base64
private static string Base64JavaToCsharp(string base64EncodedCipherText)
{
    string dummyData = base64EncodedCipherText.Trim().Replace("%", "").Replace(",", "").Replace(" ", "+").Replace("_", "/").Replace("-", "+");
    if (dummyData.Length % 4 > 0)
    {
        dummyData = dummyData.PadRight(dummyData.Length + 4 - dummyData.Length % 4, '=');
    }
    return dummyData;
}
C#修改后代码
// C#代码

// 加密为base64字符
string encodedDummyData = Convert.ToBase64String(decodedCipherText);
string base64EncodedCipherText= Base64CsharpToJava(encodedDummyData);

// 解密base64字符
string decodedDummyData = Base64JavaToCsharp(base64EncodedCipherText);
byte[] decodedCipherText = Convert.FromBase64String(decodedDummyData);

资料:
C# Base64Url 在C#中的实现 Base64.getUrlEncoder().encode()

C# 解码Java生成的Base64字符串

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值