项目日常

本文介绍了一个在广告开发SDK项目中遇到的问题,即异或加密后的字符串经Base64编码后出现“+”符号导致与后台交互失败的情况,并提出了两种解决方案:一是在前端将“+”替换为“%2B”,二是在服务器端将空白符替换为“+”。此外还介绍了Base64的不同编码模式。

开发板推荐:天空星STM32F407VET6开发板

超高性价比 STM32主控 | 超高主频 | 一板兼容百芯 | 比赛神器 | 沉金彩色丝印

广告开发SDK项目:

今日在开发过程中,在上报数据时需要对数据进行加密,依然使用了异或加密并对加密结果进行Base64.encodeToString加密。

    public static String yihuojiami(String str, String code) {
        try {
            str = URLEncoder.encode(str, "UTF-8");
        } catch (UnsupportedEncodingException e) {
        }
        byte[] data = str.getBytes();
        byte[] keyData = code.getBytes();
        int keyIndex = 0;
        for (int x = 0; x < data.length; x++) {
            data[x] = (byte) (data[x] ^ keyData[keyIndex]);
            keyIndex++;
            if (keyIndex == keyData.length) {
                keyIndex = 0;
            }
        }
        return Base64.encodeToString(data, Base64.DEFAULT);
    }


在对UserAgent内容时 编码后的内容出现了“+”,到此并没有什么问题,但是在和后台交互时 post上报数据时,“+” 被转换成了“ ”,造成了后台解密失败,原因是因为post过去编码时把+当作了特殊字符。

解决方法:1.前端在交互之前将“+” 替换“%2B“

2.服务器端在接受到数据后,可以将” “替换成”+“

这两种方法也能解决问题,Base64提供了不同的编码模式,Base64.URL_SAFE 这个模式的意思是加密时不使用对URL和文件名有特殊意义的字符来作为加密字符,具体就是以-和_取代+和/。当然还有其他的模式Base64.NO_WRAP 这个模式在编码后会自动将内容中的/n去掉。



开发板推荐:天空星STM32F407VET6开发板

超高性价比 STM32主控 | 超高主频 | 一板兼容百芯 | 比赛神器 | 沉金彩色丝印

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值